<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Visibility tracing precision</title>
		<link>http://www.allegro.cc/forums/view/583936</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 09 May 2006 21:13:07 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m having some problems with the routine I wrote to check visibility in my strategy game. Basically, I shoot a number of rays from the player to check where the player can see and or attack/travel to. This works fine. It actually works a little too well.</p><p>The ploy_ray call back just checks the pixel x and y value (divided by 16) and decides whether to stop that ray, or allow it to continue (and mark that map location as visible). </p><p>The problem is, sometimes the rays will squeeze through the gaps of certain structures and render the space as visible. Can anyone suggest a way of stopping this?</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> map_render_entity_visibility<span class="k2">(</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <span class="k1">int</span> x_o, <span class="k1">int</span> y_o, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> vis_radius <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">2</td><td>     </td></tr><tr><td class="number">3</td><td>     <span class="k1">int</span> s_x <span class="k3">=</span> x, s_y <span class="k3">=</span> y, t_x <span class="k3">=</span> <span class="n">0</span>, t_y <span class="k3">=</span> <span class="n">0</span>, a<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>     </td></tr><tr><td class="number">4</td><td>     <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle <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">0</span><span class="k2">)</span><span class="k2">;</span>     </td></tr><tr><td class="number">5</td><td>     bHaltRayCast <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> r_x <span class="k3">=</span> x_o<span class="k2">;</span> r_y <span class="k3">=</span> y_o<span class="k2">;</span>     </td></tr><tr><td class="number">6</td><td>     e_x <span class="k3">=</span> x<span class="k2">;</span> e_y <span class="k3">=</span> y<span class="k2">;</span> e_r <span class="k3">=</span> vis_radius<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>     <span class="k1">for</span> <span class="k2">(</span> a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> a <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">255</span><span class="k2">;</span> a<span class="k3">+</span><span class="k3">=</span><span class="n">5</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>     </td></tr><tr><td class="number">10</td><td>          angle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>a<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>     </td></tr><tr><td class="number">12</td><td>          <a href="http://www.allegro.cc/manual/do_line" target="_blank"><span class="a">do_line</span></a> <span class="k2">(</span>bmp, <span class="k2">(</span>x_o<span class="k3">+</span><span class="k2">(</span>x<span class="k3">*</span><span class="n">16</span><span class="k2">)</span><span class="k2">)</span><span class="k3">+</span><span class="n">8</span>, y_o<span class="k3">+</span><span class="k2">(</span>y<span class="k3">*</span><span class="n">16</span><span class="k2">)</span><span class="k3">+</span><span class="n">8</span>,</td></tr><tr><td class="number">13</td><td>                        <span class="k2">(</span>x_o<span class="k3">+</span><span class="k2">(</span>x<span class="k3">*</span><span class="n">16</span><span class="k2">)</span><span class="k2">)</span><span class="k3">+</span><span class="n">8</span> <span class="k3">+</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span><span class="n">60</span> <span class="k3">*</span> fcos <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span>,</td></tr><tr><td class="number">14</td><td>                         y_o<span class="k3">+</span><span class="k2">(</span>y<span class="k3">*</span><span class="n">16</span><span class="k2">)</span><span class="k3">+</span><span class="n">8</span> <span class="k3">+</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span><span class="n">60</span> <span class="k3">*</span> fsin <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span>,</td></tr><tr><td class="number">15</td><td>                         <span class="n">1</span>, plot_ray<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>           </td></tr><tr><td class="number">17</td><td>          bHaltRayCast <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>           </td></tr><tr><td class="number">19</td><td>     <span class="k2">}</span></td></tr><tr><td class="number">20</td><td>     </td></tr><tr><td class="number">21</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Tue, 09 May 2006 19:04:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you don&#39;t have any real-time constraints. Just make the lines thinker so that they can&#39;t stream through small gaps. You could just do your routine four times with the offsets {0,0}{1,0}{0,1}{1,1} and if all four makes it through it is visible.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kentl)</author>
		<pubDate>Tue, 09 May 2006 20:35:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So your game is tile based? Otherwise I&#39;d suggest using polygonal visibility regions.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Tue, 09 May 2006 21:13:07 +0000</pubDate>
	</item>
</rss>
