<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[quad3d] Crash!</title>
		<link>http://www.allegro.cc/forums/view/589610</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 19 Jan 2007 08:46:19 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I noticed that my game was crashing with a call to quad3d. This happens randomly, so I initially suspected overflow, or something similarly nasty and subversive! Basically, on my menu screen, the player can rotate a cube to select what he or she wants to do (New Game, Exit, etc). </p><p>I logged some of the values that my game was passing to quad3d:</p><p>Here&#39;s the call:<br /><span class="source-code"><a href="http://www.allegro.cc/manual/quad3d" target="_blank"><span class="a">quad3d</span></a><span class="k2">(</span>b, <a href="http://www.allegro.cc/manual/POLYTYPE_PTEX" target="_blank"><span class="a">POLYTYPE_PTEX</span></a>, nav_texture<span class="k2">[</span>face<span class="k2">]</span>, <span class="k3">&amp;</span>vtx1, <span class="k3">&amp;</span>vtx2, <span class="k3">&amp;</span>vtx3, <span class="k3">&amp;</span>vtx4<span class="k2">)</span><span class="k2">;</span></span></p><p>Here&#39;s the type of numbers you see when the program <i>doesn&#39;t</i> crash:
</p><div class="source-code snippet"><div class="inner"><pre> vtx1: <span class="n">8642240</span> <span class="n">6481680</span> <span class="n">11927552</span>
 vtx2: <span class="n">8642240</span> <span class="n">9246960</span> <span class="n">11927552</span>
 vtx3: <span class="n">12329280</span> <span class="n">9246960</span> <span class="n">11927552</span>
 vtx4: <span class="n">12329280</span> <span class="n">6481680</span> <span class="n">11927552</span>
</pre></div></div><p>

Here&#39;s some from when it does:
</p><div class="source-code snippet"><div class="inner"><pre> vtx1: <span class="n">320</span> <span class="n">120</span> <span class="n">2097169</span>
 vtx2: <span class="n">320</span> <span class="n">15728520</span> <span class="n">2097169</span>
 vtx3: <span class="n">20971360</span> <span class="n">15728520</span> <span class="n">2097169</span>
 vtx4: <span class="n">20971360</span> <span class="n">120</span> <span class="n">2097169</span>
</pre></div></div><p>

The entire 3d navigation code is relatively self-contained. It&#39;s also part of a game started during a hack, so it&#39;s pretty messy:</p><p>Header:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#ifndef nav3d</span></td></tr><tr><td class="number">2</td><td><span class="p">#define nav3d</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="p">#define NUM_VERTICES       8     </span></td></tr><tr><td class="number">5</td><td><span class="p">#define NUM_FACES          6  </span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="k1">typedef</span> <span class="k1">struct</span> VTX</td></tr><tr><td class="number">8</td><td><span class="k2">{</span></td></tr><tr><td class="number">9</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> x, y, z<span class="k2">;</span></td></tr><tr><td class="number">10</td><td><span class="k2">}</span> VTX<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="k1">typedef</span> <span class="k1">struct</span> QUAD              </td></tr><tr><td class="number">13</td><td><span class="k2">{</span></td></tr><tr><td class="number">14</td><td>   VTX <span class="k3">*</span>vtxlist<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>   <span class="k1">int</span> id<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>   <span class="k1">int</span> v1, v2, v3, v4<span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span> QUAD<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td><span class="k1">typedef</span> <span class="k1">struct</span> SHAPE</td></tr><tr><td class="number">20</td><td><span class="k2">{</span></td></tr><tr><td class="number">21</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> x, y, z<span class="k2">;</span>                </td></tr><tr><td class="number">22</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> rx, ry, rz<span class="k2">;</span>        </td></tr><tr><td class="number">23</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> dz<span class="k2">;</span>                   </td></tr><tr><td class="number">24</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> drx, dry, drz<span class="k2">;</span>   </td></tr><tr><td class="number">25</td><td><span class="k2">}</span> SHAPE<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td>VTX points<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span>                   </td></tr><tr><td class="number">28</td><td><span class="k2">{</span></td></tr><tr><td class="number">29</td><td>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">30</td><td>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">31</td><td>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">32</td><td>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">33</td><td>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">34</td><td>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">35</td><td>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">36</td><td>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">37</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>&#160;</td></tr><tr><td class="number">39</td><td>QUAD faces<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span>  </td></tr><tr><td class="number">40</td><td><span class="k2">{</span></td></tr><tr><td class="number">41</td><td>   <span class="k2">{</span> points, <span class="n">0</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">1</span> <span class="k2">}</span>,</td></tr><tr><td class="number">42</td><td>   <span class="k2">{</span> points, <span class="n">1</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">6</span>, <span class="n">7</span> <span class="k2">}</span>,</td></tr><tr><td class="number">43</td><td>   <span class="k2">{</span> points, <span class="n">2</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="n">5</span>, <span class="n">4</span> <span class="k2">}</span>,</td></tr><tr><td class="number">44</td><td>   <span class="k2">{</span> points, <span class="n">3</span>, <span class="n">2</span>, <span class="n">3</span>, <span class="n">7</span>, <span class="n">6</span> <span class="k2">}</span>,</td></tr><tr><td class="number">45</td><td>   <span class="k2">{</span> points, <span class="n">4</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">7</span>, <span class="n">3</span> <span class="k2">}</span>,</td></tr><tr><td class="number">46</td><td>   <span class="k2">{</span> points, <span class="n">5</span>, <span class="n">1</span>, <span class="n">2</span>, <span class="n">6</span>, <span class="n">5</span> <span class="k2">}</span></td></tr><tr><td class="number">47</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td>SHAPE nav_cube<span class="k2">;</span> </td></tr><tr><td class="number">50</td><td>VTX output_points<span class="k2">[</span>NUM_VERTICES<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>QUAD output_faces<span class="k2">[</span>NUM_FACES<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td><span class="k1">int</span> mov_count, mov_direction<span class="k2">;</span></td></tr><tr><td class="number">54</td><td>&#160;</td></tr><tr><td class="number">55</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>nav_texture<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>, <span class="k3">*</span>plank<span class="k2">;</span></td></tr><tr><td class="number">56</td><td><span class="k1">char</span> keybuf<span class="k2">[</span>KEY_MAX<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>&#160;</td></tr><tr><td class="number">58</td><td><span class="p">#endif</span></td></tr></tbody></table></div></div><p>

Here&#39;s the code that renders and translates the cube:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> translate_shapes<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>     </td></tr><tr><td class="number">4</td><td>   <span class="k1">int</span> c, d<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>   <a href="http://www.allegro.cc/manual/MATRIX" target="_blank"><span class="a">MATRIX</span></a> matrix<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>   VTX <span class="k3">*</span>outpoint <span class="k3">=</span> output_points<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>   QUAD <span class="k3">*</span>outface <span class="k3">=</span> output_faces<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>   <a href="http://www.allegro.cc/manual/get_transformation_matrix" target="_blank"><span class="a">get_transformation_matrix</span></a><span class="k2">(</span><span class="k3">&amp;</span>matrix, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span>, nav_cube.rx, nav_cube.ry, nav_cube.rz, nav_cube.x, nav_cube.y, nav_cube.z<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>   <span class="k1">for</span> <span class="k2">(</span>d <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> d <span class="k3">&lt;</span> NUM_VERTICES<span class="k2">;</span> d<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>     <a href="http://www.allegro.cc/manual/apply_matrix" target="_blank"><span class="a">apply_matrix</span></a><span class="k2">(</span><span class="k3">&amp;</span>matrix, points<span class="k2">[</span>d<span class="k2">]</span>.x, points<span class="k2">[</span>d<span class="k2">]</span>.y, points<span class="k2">[</span>d<span class="k2">]</span>.z,</td></tr><tr><td class="number">13</td><td>                    <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.x, <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.y, <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.z<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>     <a href="http://www.allegro.cc/manual/persp_project" target="_blank"><span class="a">persp_project</span></a><span class="k2">(</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.x, outpoint<span class="k2">[</span>d<span class="k2">]</span>.y, outpoint<span class="k2">[</span>d<span class="k2">]</span>.z,</td></tr><tr><td class="number">15</td><td>                  <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.x, <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>   <span class="k1">for</span> <span class="k2">(</span>d<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> d<span class="k3">&lt;</span>NUM_FACES<span class="k2">;</span> d<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">19</td><td>     outface<span class="k2">[</span>d<span class="k2">]</span> <span class="k3">=</span> faces<span class="k2">[</span>d<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>     outface<span class="k2">[</span>d<span class="k2">]</span>.vtxlist <span class="k3">=</span> outpoint<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>   outpoint <span class="k3">+</span><span class="k3">=</span> NUM_VERTICES<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>   outface <span class="k3">+</span><span class="k3">=</span> NUM_FACES<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td><span class="k2">}</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td><span class="k1">void</span> draw_quad<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>b, VTX <span class="k3">*</span>v1, VTX <span class="k3">*</span>v2, VTX <span class="k3">*</span>v3, VTX <span class="k3">*</span>v4, <span class="k1">int</span> face<span class="k2">)</span></td></tr><tr><td class="number">29</td><td><span class="k2">{</span></td></tr><tr><td class="number">30</td><td>     </td></tr><tr><td class="number">31</td><td>   <span class="c">/* four vertices */</span></td></tr><tr><td class="number">32</td><td>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx1 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>,      <span class="n">0</span>,      <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx2 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">0</span>,      <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx3 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx4 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>,      <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td>   vtx1.x <span class="k3">=</span> v1-&gt;x<span class="k2">;</span>   vtx1.y <span class="k3">=</span> v1-&gt;y<span class="k2">;</span>   vtx1.z <span class="k3">=</span> v1-&gt;z<span class="k2">;</span></td></tr><tr><td class="number">38</td><td>   vtx2.x <span class="k3">=</span> v2-&gt;x<span class="k2">;</span>   vtx2.y <span class="k3">=</span> v2-&gt;y<span class="k2">;</span>   vtx2.z <span class="k3">=</span> v2-&gt;z<span class="k2">;</span></td></tr><tr><td class="number">39</td><td>   vtx3.x <span class="k3">=</span> v3-&gt;x<span class="k2">;</span>   vtx3.y <span class="k3">=</span> v3-&gt;y<span class="k2">;</span>   vtx3.z <span class="k3">=</span> v3-&gt;z<span class="k2">;</span></td></tr><tr><td class="number">40</td><td>   vtx4.x <span class="k3">=</span> v4-&gt;x<span class="k2">;</span>   vtx4.y <span class="k3">=</span> v4-&gt;y<span class="k2">;</span>   vtx4.z <span class="k3">=</span> v4-&gt;z<span class="k2">;</span></td></tr><tr><td class="number">41</td><td>&#160;</td></tr><tr><td class="number">42</td><td>   log_write<span class="k2">(</span><span class="s">" vtx1: %i %i %i"</span>, vtx1.x, vtx1.y, vtx1.z <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>   log_write<span class="k2">(</span><span class="s">" vtx2: %i %i %i"</span>, vtx2.x, vtx2.y, vtx2.z <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>   log_write<span class="k2">(</span><span class="s">" vtx3: %i %i %i"</span>, vtx3.x, vtx3.y, vtx3.z <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>   log_write<span class="k2">(</span><span class="s">" vtx4: %i %i %i"</span>, vtx4.x, vtx4.y, vtx4.z <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td>   <a href="http://www.allegro.cc/manual/quad3d" target="_blank"><span class="a">quad3d</span></a><span class="k2">(</span>b, <a href="http://www.allegro.cc/manual/POLYTYPE_PTEX" target="_blank"><span class="a">POLYTYPE_PTEX</span></a>, nav_texture<span class="k2">[</span>face<span class="k2">]</span>, <span class="k3">&amp;</span>vtx1, <span class="k3">&amp;</span>vtx2, <span class="k3">&amp;</span>vtx3, <span class="k3">&amp;</span>vtx4<span class="k2">)</span><span class="k2">;</span> <span class="c">// Crashes here!</span></td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td><span class="k2">}</span></td></tr><tr><td class="number">50</td><td>&#160;</td></tr><tr><td class="number">51</td><td><span class="k1">int</span> quad_cmp<span class="k2">(</span><span class="k1">const</span> <span class="k1">void</span> <span class="k3">*</span>e1, <span class="k1">const</span> <span class="k1">void</span> <span class="k3">*</span>e2<span class="k2">)</span></td></tr><tr><td class="number">52</td><td><span class="k2">{</span></td></tr><tr><td class="number">53</td><td>    </td></tr><tr><td class="number">54</td><td>   QUAD <span class="k3">*</span>q1 <span class="k3">=</span> <span class="k2">(</span>QUAD <span class="k3">*</span><span class="k2">)</span>e1<span class="k2">;</span></td></tr><tr><td class="number">55</td><td>   QUAD <span class="k3">*</span>q2 <span class="k3">=</span> <span class="k2">(</span>QUAD <span class="k3">*</span><span class="k2">)</span>e2<span class="k2">;</span></td></tr><tr><td class="number">56</td><td>&#160;</td></tr><tr><td class="number">57</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> d1 <span class="k3">=</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v1<span class="k2">]</span>.z <span class="k3">+</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v2<span class="k2">]</span>.z <span class="k3">+</span></td></tr><tr><td class="number">58</td><td>        q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v3<span class="k2">]</span>.z <span class="k3">+</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v4<span class="k2">]</span>.z<span class="k2">;</span></td></tr><tr><td class="number">59</td><td>&#160;</td></tr><tr><td class="number">60</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> d2 <span class="k3">=</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v1<span class="k2">]</span>.z <span class="k3">+</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v2<span class="k2">]</span>.z <span class="k3">+</span></td></tr><tr><td class="number">61</td><td>        q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v3<span class="k2">]</span>.z <span class="k3">+</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v4<span class="k2">]</span>.z<span class="k2">;</span></td></tr><tr><td class="number">62</td><td>&#160;</td></tr><tr><td class="number">63</td><td>   <span class="k1">return</span> d2 <span class="k3">-</span> d1<span class="k2">;</span></td></tr><tr><td class="number">64</td><td>   </td></tr><tr><td class="number">65</td><td><span class="k2">}</span></td></tr><tr><td class="number">66</td><td>&#160;</td></tr><tr><td class="number">67</td><td><span class="k1">void</span> draw_shapes<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>b<span class="k2">)</span></td></tr><tr><td class="number">68</td><td><span class="k2">{</span></td></tr><tr><td class="number">69</td><td>     </td></tr><tr><td class="number">70</td><td>   <span class="k1">int</span> c<span class="k2">;</span></td></tr><tr><td class="number">71</td><td>   QUAD <span class="k3">*</span>face <span class="k3">=</span> output_faces<span class="k2">;</span></td></tr><tr><td class="number">72</td><td>   VTX <span class="k3">*</span>v1, <span class="k3">*</span>v2, <span class="k3">*</span>v3, <span class="k3">*</span>v4<span class="k2">;</span></td></tr><tr><td class="number">73</td><td>&#160;</td></tr><tr><td class="number">74</td><td>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_635.html" target="_blank">qsort</a><span class="k2">(</span>output_faces, NUM_FACES, <span class="k1">sizeof</span><span class="k2">(</span>QUAD<span class="k2">)</span>, quad_cmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">75</td><td>&#160;</td></tr><tr><td class="number">76</td><td>   <span class="k1">for</span> <span class="k2">(</span>c<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> NUM_FACES<span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">77</td><td>&#160;</td></tr><tr><td class="number">78</td><td>      v1 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v1<span class="k2">;</span></td></tr><tr><td class="number">79</td><td>      v2 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v2<span class="k2">;</span></td></tr><tr><td class="number">80</td><td>      v3 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v3<span class="k2">;</span></td></tr><tr><td class="number">81</td><td>      v4 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v4<span class="k2">;</span></td></tr><tr><td class="number">82</td><td>&#160;</td></tr><tr><td class="number">83</td><td>    draw_quad<span class="k2">(</span>b, v1, v2, v3, v4, face-&gt;id<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">84</td><td>&#160;</td></tr><tr><td class="number">85</td><td>      face<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">86</td><td>      </td></tr><tr><td class="number">87</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">88</td><td>   </td></tr><tr><td class="number">89</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Here&#39;s how I set everything up:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> setup_navigation<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>     </td></tr><tr><td class="number">4</td><td>   <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span>, x <span class="k3">=</span> <span class="n">0</span>, y <span class="k3">=</span> <span class="n">0</span>, i_a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>  </td></tr><tr><td class="number">5</td><td>     </td></tr><tr><td class="number">6</td><td>   nav_cube.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.z <span class="k3">=</span> <span class="n">150</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>   nav_cube.rx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.ry <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.rz <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>   nav_cube.dz <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span> nav_cube.drx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.dry <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.drz <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>   </td></tr><tr><td class="number">10</td><td>   mov_count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> mov_direction <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>   </td></tr><tr><td class="number">12</td><td>   <a href="http://www.allegro.cc/manual/set_projection_viewport" target="_blank"><span class="a">set_projection_viewport</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">320</span>, <span class="n">240</span><span class="k2">)</span><span class="k2">;</span>   </td></tr><tr><td class="number">13</td><td>   </td></tr><tr><td class="number">14</td><td>   nav_texture<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex0.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>   nav_texture<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex1.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>   nav_texture<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex2.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>   nav_texture<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex3.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>   nav_texture<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex4.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>   nav_texture<span class="k2">[</span><span class="n">5</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex5.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>   </td></tr><tr><td class="number">21</td><td>   plank <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/plank.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>   </td></tr><tr><td class="number">23</td><td>   <span class="k1">if</span><span class="k2">(</span> nav_texture<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> nav_texture<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> nav_texture<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> nav_texture<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span></td></tr><tr><td class="number">24</td><td>       nav_texture<span class="k2">[</span><span class="n">5</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> plank <span class="k3">=</span><span class="k3">=</span> NULL <span class="k2">)</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>       </td></tr><tr><td class="number">26</td><td>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Any suggestions?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Thu, 18 Jan 2007 04:50:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>v1 = face-&gt;vtxlist + face-&gt;v1;<br />v2 = face-&gt;vtxlist + face-&gt;v2;<br />v3 = face-&gt;vtxlist + face-&gt;v3;<br />v4 = face-&gt;vtxlist + face-&gt;v4;</p><p>The only suggestion I have is to add some logging before those statements and make sure you&#39;re getting what you expect for face-&gt;vtxlist.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kdevil)</author>
		<pubDate>Thu, 18 Jan 2007 07:14:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The crashing numbers include 320 and 120.  Do those particular values occur somewhere else?  Just a guess... a wild pointer is stuffing them everywhere
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Fri, 19 Jan 2007 00:52:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>EDIT: Looks like the navigation code is fine. If I skip its execution entirely, the game will still crash at random points. Looks like it&#039;s a rogue pointer, or something equally horrible!</p><p>EDIT 2: Scratch that. Actually, with the navigation code entirely commented out, I have no crash problems. It&#039;s in there, somewhere.</p><p>Full header:
</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="p">#ifndef nav3d</span>
<span class="number">  2</span><span class="p">#define nav3d</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#define NUM_VERTICES       8     </span>
<span class="number">  5</span><span class="p">#define NUM_FACES          6  </span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">typedef</span> <span class="k1">struct</span> VTX
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> x, y, z<span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span> VTX<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">typedef</span> <span class="k1">struct</span> QUAD              
<span class="number"> 13</span><span class="k2">{</span>
<span class="number"> 14</span>   VTX <span class="k3">*</span>vtxlist<span class="k2">;</span>
<span class="number"> 15</span>   <span class="k1">int</span> id<span class="k2">;</span>
<span class="number"> 16</span>   <span class="k1">int</span> v1, v2, v3, v4<span class="k2">;</span>
<span class="number"> 17</span><span class="k2">}</span> QUAD<span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="k1">typedef</span> <span class="k1">struct</span> SHAPE
<span class="number"> 20</span><span class="k2">{</span>
<span class="number"> 21</span>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> x, y, z<span class="k2">;</span>                
<span class="number"> 22</span>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> rx, ry, rz<span class="k2">;</span>        
<span class="number"> 23</span>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> dz<span class="k2">;</span>                   
<span class="number"> 24</span>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> drx, dry, drz<span class="k2">;</span>   
<span class="number"> 25</span><span class="k2">}</span> SHAPE<span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>VTX points<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span>                   
<span class="number"> 28</span><span class="k2">{</span>
<span class="number"> 29</span>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,
<span class="number"> 30</span>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,
<span class="number"> 31</span>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,
<span class="number"> 32</span>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,
<span class="number"> 33</span>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,
<span class="number"> 34</span>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,
<span class="number"> 35</span>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,
<span class="number"> 36</span>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,
<span class="number"> 37</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 38</span>
<span class="number"> 39</span>QUAD faces<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span>  
<span class="number"> 40</span><span class="k2">{</span>
<span class="number"> 41</span>   <span class="k2">{</span> points, <span class="n">0</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">1</span> <span class="k2">}</span>,
<span class="number"> 42</span>   <span class="k2">{</span> points, <span class="n">1</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">6</span>, <span class="n">7</span> <span class="k2">}</span>,
<span class="number"> 43</span>   <span class="k2">{</span> points, <span class="n">2</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="n">5</span>, <span class="n">4</span> <span class="k2">}</span>,
<span class="number"> 44</span>   <span class="k2">{</span> points, <span class="n">3</span>, <span class="n">2</span>, <span class="n">3</span>, <span class="n">7</span>, <span class="n">6</span> <span class="k2">}</span>,
<span class="number"> 45</span>   <span class="k2">{</span> points, <span class="n">4</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">7</span>, <span class="n">3</span> <span class="k2">}</span>,
<span class="number"> 46</span>   <span class="k2">{</span> points, <span class="n">5</span>, <span class="n">1</span>, <span class="n">2</span>, <span class="n">6</span>, <span class="n">5</span> <span class="k2">}</span>
<span class="number"> 47</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 48</span>
<span class="number"> 49</span>SHAPE nav_cube<span class="k2">;</span> 
<span class="number"> 50</span>VTX output_points<span class="k2">[</span>NUM_VERTICES<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 51</span>QUAD output_faces<span class="k2">[</span>NUM_FACES<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 52</span>
<span class="number"> 53</span><span class="k1">int</span> mov_count, mov_direction<span class="k2">;</span>
<span class="number"> 54</span>
<span class="number"> 55</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>nav_texture<span class="k2">[</span><span class="n">6</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 56</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>plank<span class="k2">;</span>
<span class="number"> 57</span><span class="k1">char</span> keybuf<span class="k2">[</span>KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 58</span>
<span class="number"> 59</span><span class="p">#endif</span>
</div></div><p>

Full source:
</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="p">#include &lt;allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include "application.h"</span>
<span class="number">   3</span><span class="p">#include "canvas.h"</span>
<span class="number">   4</span><span class="p">#include "object.h"</span>
<span class="number">   5</span><span class="p">#include "nav3d.h"</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="k1">void</span> draw_quad<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>b, VTX <span class="k3">*</span>v1, VTX <span class="k3">*</span>v2, VTX <span class="k3">*</span>v3, VTX <span class="k3">*</span>v4, <span class="k1">int</span> face<span class="k2">)</span><span class="k2">;</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="k1">int</span> setup_navigation<span class="k2">(</span><span class="k2">)</span>
<span class="number">  10</span><span class="k2">{</span>
<span class="number">  11</span>     
<span class="number">  12</span>   <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span>, x <span class="k3">=</span> <span class="n">0</span>, y <span class="k3">=</span> <span class="n">0</span>, i_a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>  
<span class="number">  13</span>     
<span class="number">  14</span>   nav_cube.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.z <span class="k3">=</span> <span class="n">150</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span><span class="k2">;</span>
<span class="number">  15</span>   nav_cube.rx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.ry <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.rz <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  16</span>   nav_cube.dz <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span> nav_cube.drx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.dry <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> nav_cube.drz <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  17</span>   
<span class="number">  18</span>   mov_count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> mov_direction <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  19</span>   
<span class="number">  20</span>   <a href="http://www.allegro.cc/manual/set_projection_viewport" target="_blank"><span class="a">set_projection_viewport</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">320</span>, <span class="n">240</span><span class="k2">)</span><span class="k2">;</span>   
<span class="number">  21</span>   
<span class="number">  22</span>   nav_texture<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex0.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span>   nav_texture<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex1.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>   nav_texture<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex2.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>   nav_texture<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex3.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>   nav_texture<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex4.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span>   nav_texture<span class="k2">[</span><span class="n">5</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/tex5.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>   
<span class="number">  29</span>   plank <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/hud/plank.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>   
<span class="number">  31</span>   <span class="k1">if</span><span class="k2">(</span> nav_texture<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> nav_texture<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> nav_texture<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> nav_texture<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span>
<span class="number">  32</span>       nav_texture<span class="k2">[</span><span class="n">5</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> plank <span class="k3">=</span><span class="k3">=</span> NULL <span class="k2">)</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  33</span>       
<span class="number">  34</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  35</span>
<span class="number">  36</span><span class="k2">}</span>
<span class="number">  37</span>
<span class="number">  38</span><span class="k1">void</span> update_navigation<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  39</span><span class="k2">{</span>
<span class="number">  40</span>
<span class="number">  41</span>   nav_cube.z <span class="k3">+</span><span class="k3">=</span> nav_cube.dz<span class="k2">;</span>
<span class="number">  42</span>
<span class="number">  43</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>nav_cube.z <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">1024</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>nav_cube.z <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">192</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> nav_cube.dz <span class="k3">=</span> <span class="k3">-</span>nav_cube.dz<span class="k2">;</span>
<span class="number">  44</span>
<span class="number">  45</span>   nav_cube.rx <span class="k3">+</span><span class="k3">=</span> nav_cube.drx<span class="k2">;</span>
<span class="number">  46</span>   nav_cube.ry <span class="k3">+</span><span class="k3">=</span> nav_cube.dry<span class="k2">;</span>
<span class="number">  47</span>   nav_cube.rz <span class="k3">+</span><span class="k3">=</span> nav_cube.drz<span class="k2">;</span>
<span class="number">  48</span>
<span class="number">  49</span><span class="k2">}</span>
<span class="number">  50</span>
<span class="number">  51</span><span class="k1">void</span> translate_shapes<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  52</span><span class="k2">{</span>
<span class="number">  53</span>     
<span class="number">  54</span>   <span class="k1">int</span> c, d<span class="k2">;</span>
<span class="number">  55</span>   <a href="http://www.allegro.cc/manual/MATRIX" target="_blank"><span class="a">MATRIX</span></a> matrix<span class="k2">;</span>
<span class="number">  56</span>   VTX <span class="k3">*</span>outpoint <span class="k3">=</span> output_points<span class="k2">;</span>
<span class="number">  57</span>   QUAD <span class="k3">*</span>outface <span class="k3">=</span> output_faces<span class="k2">;</span>
<span class="number">  58</span>
<span class="number">  59</span>   <a href="http://www.allegro.cc/manual/get_transformation_matrix" target="_blank"><span class="a">get_transformation_matrix</span></a><span class="k2">(</span><span class="k3">&amp;</span>matrix, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span>, nav_cube.rx, nav_cube.ry, nav_cube.rz, nav_cube.x, nav_cube.y, nav_cube.z<span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>
<span class="number">  61</span>   <span class="k1">for</span> <span class="k2">(</span>d <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> d <span class="k3">&lt;</span> NUM_VERTICES<span class="k2">;</span> d<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  62</span>     <a href="http://www.allegro.cc/manual/apply_matrix" target="_blank"><span class="a">apply_matrix</span></a><span class="k2">(</span><span class="k3">&amp;</span>matrix, points<span class="k2">[</span>d<span class="k2">]</span>.x, points<span class="k2">[</span>d<span class="k2">]</span>.y, points<span class="k2">[</span>d<span class="k2">]</span>.z,
<span class="number">  63</span>                    <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.x, <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.y, <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.z<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>     <a href="http://www.allegro.cc/manual/persp_project" target="_blank"><span class="a">persp_project</span></a><span class="k2">(</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.x, outpoint<span class="k2">[</span>d<span class="k2">]</span>.y, outpoint<span class="k2">[</span>d<span class="k2">]</span>.z,
<span class="number">  65</span>                  <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.x, <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>   <span class="k2">}</span>
<span class="number">  67</span>
<span class="number">  68</span>   <span class="k1">for</span> <span class="k2">(</span>d<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> d<span class="k3">&lt;</span>NUM_FACES<span class="k2">;</span> d<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  69</span>     outface<span class="k2">[</span>d<span class="k2">]</span> <span class="k3">=</span> faces<span class="k2">[</span>d<span class="k2">]</span><span class="k2">;</span>
<span class="number">  70</span>     outface<span class="k2">[</span>d<span class="k2">]</span>.vtxlist <span class="k3">=</span> outpoint<span class="k2">;</span>
<span class="number">  71</span>   <span class="k2">}</span>
<span class="number">  72</span>
<span class="number">  73</span>   outpoint <span class="k3">+</span><span class="k3">=</span> NUM_VERTICES<span class="k2">;</span>
<span class="number">  74</span>   outface <span class="k3">+</span><span class="k3">=</span> NUM_FACES<span class="k2">;</span>
<span class="number">  75</span>
<span class="number">  76</span><span class="k2">}</span>
<span class="number">  77</span>
<span class="number">  78</span><span class="k1">void</span> draw_quad<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>b, VTX <span class="k3">*</span>v1, VTX <span class="k3">*</span>v2, VTX <span class="k3">*</span>v3, VTX <span class="k3">*</span>v4, <span class="k1">int</span> face<span class="k2">)</span>
<span class="number">  79</span><span class="k2">{</span>
<span class="number">  80</span>     
<span class="number">  81</span>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx1 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>,      <span class="n">0</span>,      <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  82</span>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx2 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">0</span>,      <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  83</span>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx3 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  84</span>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx4 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>,      <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>   vtx1.x <span class="k3">=</span> v1-&gt;x<span class="k2">;</span>   vtx1.y <span class="k3">=</span> v1-&gt;y<span class="k2">;</span>   vtx1.z <span class="k3">=</span> v1-&gt;z<span class="k2">;</span>
<span class="number">  87</span>   vtx2.x <span class="k3">=</span> v2-&gt;x<span class="k2">;</span>   vtx2.y <span class="k3">=</span> v2-&gt;y<span class="k2">;</span>   vtx2.z <span class="k3">=</span> v2-&gt;z<span class="k2">;</span>
<span class="number">  88</span>   vtx3.x <span class="k3">=</span> v3-&gt;x<span class="k2">;</span>   vtx3.y <span class="k3">=</span> v3-&gt;y<span class="k2">;</span>   vtx3.z <span class="k3">=</span> v3-&gt;z<span class="k2">;</span>
<span class="number">  89</span>   vtx4.x <span class="k3">=</span> v4-&gt;x<span class="k2">;</span>   vtx4.y <span class="k3">=</span> v4-&gt;y<span class="k2">;</span>   vtx4.z <span class="k3">=</span> v4-&gt;z<span class="k2">;</span>
<span class="number">  90</span>
<span class="number">  91</span>   log_write<span class="k2">(</span><span class="s">" vtx1: %i %i %i"</span>, vtx1.x, vtx1.y, vtx1.z <span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>   log_write<span class="k2">(</span><span class="s">" vtx2: %i %i %i"</span>, vtx2.x, vtx2.y, vtx2.z <span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span>   log_write<span class="k2">(</span><span class="s">" vtx3: %i %i %i"</span>, vtx3.x, vtx3.y, vtx3.z <span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>   log_write<span class="k2">(</span><span class="s">" vtx4: %i %i %i"</span>, vtx4.x, vtx4.y, vtx4.z <span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>
<span class="number">  96</span>   <a href="http://www.allegro.cc/manual/quad3d" target="_blank"><span class="a">quad3d</span></a><span class="k2">(</span>b, <a href="http://www.allegro.cc/manual/POLYTYPE_PTEX" target="_blank"><span class="a">POLYTYPE_PTEX</span></a>, nav_texture<span class="k2">[</span>face<span class="k2">]</span>, <span class="k3">&amp;</span>vtx1, <span class="k3">&amp;</span>vtx2, <span class="k3">&amp;</span>vtx3, <span class="k3">&amp;</span>vtx4<span class="k2">)</span><span class="k2">;</span> <span class="c">// Crashes here!</span>
<span class="number">  97</span>
<span class="number">  98</span><span class="k2">}</span>
<span class="number">  99</span>
<span class="number"> 100</span><span class="k1">int</span> quad_cmp<span class="k2">(</span><span class="k1">const</span> <span class="k1">void</span> <span class="k3">*</span>e1, <span class="k1">const</span> <span class="k1">void</span> <span class="k3">*</span>e2<span class="k2">)</span>
<span class="number"> 101</span><span class="k2">{</span>
<span class="number"> 102</span>    
<span class="number"> 103</span>   QUAD <span class="k3">*</span>q1 <span class="k3">=</span> <span class="k2">(</span>QUAD <span class="k3">*</span><span class="k2">)</span>e1<span class="k2">;</span>
<span class="number"> 104</span>   QUAD <span class="k3">*</span>q2 <span class="k3">=</span> <span class="k2">(</span>QUAD <span class="k3">*</span><span class="k2">)</span>e2<span class="k2">;</span>
<span class="number"> 105</span>
<span class="number"> 106</span>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> d1 <span class="k3">=</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v1<span class="k2">]</span>.z <span class="k3">+</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v2<span class="k2">]</span>.z <span class="k3">+</span>
<span class="number"> 107</span>        q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v3<span class="k2">]</span>.z <span class="k3">+</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v4<span class="k2">]</span>.z<span class="k2">;</span>
<span class="number"> 108</span>
<span class="number"> 109</span>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> d2 <span class="k3">=</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v1<span class="k2">]</span>.z <span class="k3">+</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v2<span class="k2">]</span>.z <span class="k3">+</span>
<span class="number"> 110</span>        q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v3<span class="k2">]</span>.z <span class="k3">+</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v4<span class="k2">]</span>.z<span class="k2">;</span>
<span class="number"> 111</span>
<span class="number"> 112</span>   <span class="k1">return</span> d2 <span class="k3">-</span> d1<span class="k2">;</span>
<span class="number"> 113</span>   
<span class="number"> 114</span><span class="k2">}</span>
<span class="number"> 115</span>
<span class="number"> 116</span><span class="k1">void</span> draw_shapes<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>b<span class="k2">)</span>
<span class="number"> 117</span><span class="k2">{</span>
<span class="number"> 118</span>     
<span class="number"> 119</span>   <span class="k1">int</span> c<span class="k2">;</span>
<span class="number"> 120</span>   QUAD <span class="k3">*</span>face <span class="k3">=</span> output_faces<span class="k2">;</span>
<span class="number"> 121</span>   VTX <span class="k3">*</span>v1, <span class="k3">*</span>v2, <span class="k3">*</span>v3, <span class="k3">*</span>v4<span class="k2">;</span>
<span class="number"> 122</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_635.html" target="_blank">qsort</a><span class="k2">(</span>output_faces, NUM_FACES, <span class="k1">sizeof</span><span class="k2">(</span>QUAD<span class="k2">)</span>, quad_cmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>
<span class="number"> 124</span>   <span class="k1">for</span> <span class="k2">(</span>c<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> NUM_FACES<span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 125</span>
<span class="number"> 126</span>      v1 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v1<span class="k2">;</span>
<span class="number"> 127</span>      v2 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v2<span class="k2">;</span>
<span class="number"> 128</span>      v3 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v3<span class="k2">;</span>
<span class="number"> 129</span>      v4 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v4<span class="k2">;</span>
<span class="number"> 130</span>
<span class="number"> 131</span>    draw_quad<span class="k2">(</span>b, v1, v2, v3, v4, face-&gt;id<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>
<span class="number"> 133</span>      face<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 134</span>      
<span class="number"> 135</span>   <span class="k2">}</span>
<span class="number"> 136</span>   
<span class="number"> 137</span><span class="k2">}</span>
<span class="number"> 138</span>
<span class="number"> 139</span><span class="k1">int</span> get_look_face<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 140</span><span class="k2">{</span>
<span class="number"> 141</span>
<span class="number"> 142</span>   <span class="k1">int</span> c<span class="k2">;</span>
<span class="number"> 143</span>
<span class="number"> 144</span>   QUAD <span class="k3">*</span>face <span class="k3">=</span> output_faces<span class="k2">;</span>
<span class="number"> 145</span>
<span class="number"> 146</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_635.html" target="_blank">qsort</a><span class="k2">(</span>output_faces, NUM_FACES, <span class="k1">sizeof</span><span class="k2">(</span>QUAD<span class="k2">)</span>, quad_cmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 147</span>   
<span class="number"> 148</span>   <span class="k1">for</span><span class="k2">(</span> c <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> NUM_FACES<span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 149</span>        
<span class="number"> 150</span>        <span class="k1">if</span><span class="k2">(</span> c <span class="k3">=</span><span class="k3">=</span> <span class="k2">(</span>NUM_FACES-1<span class="k2">)</span> <span class="k2">)</span> <span class="k1">return</span> face-&gt;id<span class="k2">;</span>
<span class="number"> 151</span>        face<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 152</span>        
<span class="number"> 153</span>   <span class="k2">}</span>
<span class="number"> 154</span>
<span class="number"> 155</span>   <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 156</span>    
<span class="number"> 157</span><span class="k2">}</span>
<span class="number"> 158</span>
<span class="number"> 159</span><span class="k1">void</span> menu_logic<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 160</span>     
<span class="number"> 161</span>     update_navigation<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span>     translate_shapes<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 163</span>     
<span class="number"> 164</span>     <span class="k1">if</span><span class="k2">(</span> mov_count <span class="k3">&gt;</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 165</span>         
<span class="number"> 166</span>         mov_count <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 167</span>         
<span class="number"> 168</span>         <span class="k1">switch</span><span class="k2">(</span> mov_direction <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 169</span>                 
<span class="number"> 170</span>                 <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span>                      
<span class="number"> 171</span>                      nav_cube.rx <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>                      
<span class="number"> 172</span>                 <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 173</span>                 <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span>                      
<span class="number"> 174</span>                      nav_cube.rx <span class="k3">-</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>                      
<span class="number"> 175</span>                 <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 176</span>                 <span class="k1">case</span> <span class="n">2</span><span class="k2">:</span>                      
<span class="number"> 177</span>                      nav_cube.ry <span class="k3">-</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>                      
<span class="number"> 178</span>                 <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 179</span>                 <span class="k1">case</span> <span class="n">3</span><span class="k2">:</span>                      
<span class="number"> 180</span>                      nav_cube.ry <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>                      
<span class="number"> 181</span>                 <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 182</span>                 
<span class="number"> 183</span>         <span class="k2">}</span>
<span class="number"> 184</span>         
<span class="number"> 185</span>         <span class="k1">if</span><span class="k2">(</span> mov_count <span class="k3">&gt;</span> <span class="n">64</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 186</span>             mov_count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 187</span>         <span class="k2">}</span>
<span class="number"> 188</span>         
<span class="number"> 189</span>     <span class="k2">}</span>
<span class="number"> 190</span>     
<span class="number"> 191</span><span class="k2">}</span>
<span class="number"> 192</span>
<span class="number"> 193</span><span class="k1">void</span> menu_input<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 194</span>   
<span class="number"> 195</span>   <span class="k1">if</span><span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_D<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>keybuf<span class="k2">[</span>KEY_D<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> mov_count <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 196</span>       
<span class="number"> 197</span>       mov_count <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> mov_direction <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
<span class="number"> 198</span>       
<span class="number"> 199</span>   <span class="k2">}</span>
<span class="number"> 200</span>   
<span class="number"> 201</span>   <span class="k1">if</span><span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_A<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>keybuf<span class="k2">[</span>KEY_A<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> mov_count <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 202</span>       
<span class="number"> 203</span>       mov_count <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> mov_direction <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 204</span>       
<span class="number"> 205</span>   <span class="k2">}</span>
<span class="number"> 206</span>   
<span class="number"> 207</span>   <span class="k1">if</span><span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_S<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>keybuf<span class="k2">[</span>KEY_S<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> mov_count <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 208</span>       
<span class="number"> 209</span>       mov_count <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> mov_direction <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 210</span>       
<span class="number"> 211</span>   <span class="k2">}</span>
<span class="number"> 212</span>   
<span class="number"> 213</span>   <span class="k1">if</span><span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_W<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>keybuf<span class="k2">[</span>KEY_W<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> mov_count <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 214</span>       
<span class="number"> 215</span>       mov_count <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> mov_direction <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 216</span>       
<span class="number"> 217</span>   <span class="k2">}</span>
<span class="number"> 218</span>   
<span class="number"> 219</span>   <span class="k1">if</span><span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_SPACE<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>keybuf<span class="k2">[</span>KEY_SPACE<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> mov_count <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 220</span>       
<span class="number"> 221</span>       <span class="k1">switch</span><span class="k2">(</span> get_look_face<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 222</span>               
<span class="number"> 223</span>               <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span>
<span class="number"> 224</span>                    application_set_state<span class="k2">(</span>APP_GAME<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 225</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 226</span>               <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span>
<span class="number"> 227</span>                    application_set_state<span class="k2">(</span>APP_TERMINATING<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 228</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 229</span>               
<span class="number"> 230</span>       <span class="k2">}</span>
<span class="number"> 231</span>       
<span class="number"> 232</span>   <span class="k2">}</span>
<span class="number"> 233</span>     
<span class="number"> 234</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span><span class="k2">(</span><span class="k1">void</span><span class="k3">*</span><span class="k2">)</span>keybuf,<span class="k2">(</span><span class="k1">void</span><span class="k3">*</span><span class="k2">)</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a>,<span class="k1">sizeof</span><span class="k2">(</span>keybuf<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 235</span>     
<span class="number"> 236</span><span class="k2">}</span>
<span class="number"> 237</span>
<span class="number"> 238</span><span class="k1">void</span> render_menu<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 239</span><span class="k2">{</span>
<span class="number"> 240</span>
<span class="number"> 241</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"> 242</span>   
<span class="number"> 243</span>   <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span> buffer, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 244</span>
<span class="number"> 245</span>   draw_shapes<span class="k2">(</span> buffer <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 246</span>   <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span> buffer, plank, <span class="n">110</span>, <span class="n">168</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</span>      
<span class="number"> 248</span>   <span class="k1">if</span><span class="k2">(</span> mov_count <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span> 
<span class="number"> 249</span>       
<span class="number"> 250</span>       <span class="k1">switch</span><span class="k2">(</span> get_look_face<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 251</span>               
<span class="number"> 252</span>               <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span>
<span class="number"> 253</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">181</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"NEW GAME"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 254</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">180</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"NEW GAME"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 255</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 256</span>               <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span>
<span class="number"> 257</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">181</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"EXIT"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 258</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">180</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"EXIT"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 259</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 260</span>               <span class="k1">case</span> <span class="n">2</span><span class="k2">:</span>
<span class="number"> 261</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">181</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"CREDITS"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 262</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">180</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"CREDITS"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 263</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 264</span>               <span class="k1">case</span> <span class="n">3</span><span class="k2">:</span>
<span class="number"> 265</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">181</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"OPTIONS"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 266</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">180</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"OPTIONS"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 267</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 268</span>               <span class="k1">case</span> <span class="n">4</span><span class="k2">:</span>
<span class="number"> 269</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">181</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"LOAD GAME"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 270</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">180</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"LOAD GAME"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 271</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 272</span>               <span class="k1">case</span> <span class="n">5</span><span class="k2">:</span>
<span class="number"> 273</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">181</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"SAVE GAME"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 274</span>                    <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, small_n, <span class="n">160</span>, <span class="n">180</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"SAVE GAME"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 275</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 276</span>               
<span class="number"> 277</span>       <span class="k2">}</span>
<span class="number"> 278</span>       
<span class="number"> 279</span>   <span class="k2">}</span>
<span class="number"> 280</span>   
<span class="number"> 281</span>   <a href="http://www.allegro.cc/manual/stretch_blit" target="_blank"><span class="a">stretch_blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">320</span>, <span class="n">240</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 282</span>
<span class="number"> 283</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Fri, 19 Jan 2007 02:49:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Would you mind attaching the source to the entire project? Im willing to debug it but I dont want to hack together the source from your code pastes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Fri, 19 Jan 2007 08:46:19 +0000</pubDate>
	</item>
</rss>
