<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Detecting mouseover on isometric map</title>
		<link>http://www.allegro.cc/forums/view/613648</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 20 Dec 2013 09:05:20 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here we go with another newbie question </p><p>I&#39;m rendering my map with 2 nested for loops.<br />It looks like this:</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
..  ..  01  ..  ..<br />  ..  02  06  ..<br />..  03  07  11  ..<br />  04  08  12  16<br />05  09  13  17  21<br />  10  14  18  22<br />..  15  19  23  ..<br />  ..  20  24  ..<br />..  ..  25  ..  ..
</p></div></div><p>

Now, I&#39;ve been working in an algorithm that can detect the tile where the cursor is, but failed miserably.<br />I think the problem is I&#39;m storing the tiles in a way that doesn&#39;t help at all.<br />Currently this is what I have:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>        <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>i <span class="k3">&lt;</span> this-&gt;total_tiles<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="c">// rows</span>
<span class="number">  2</span>        <span class="k2">{</span>
<span class="number">  3</span>                <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> j <span class="k3">=</span> this-&gt;total_tiles<span class="k2">;</span>j <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j--<span class="k2">)</span> <span class="c">// columns</span>
<span class="number">  4</span>                <span class="k2">{</span>
<span class="number">  5</span>
<span class="number">  6</span>                        <span class="c">// ...the rendering part works just fine</span>
<span class="number">  7</span>
<span class="number">  8</span>                        <span class="c">// I guess this is what i'm doing wrong                                                                                                                                                                    </span>
<span class="number">  9</span>                        this-&gt;tiles<span class="k2">[</span>this-&gt;current_tile<span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> j<span class="k2">;</span> <span class="c">// column</span>
<span class="number"> 10</span>                        this-&gt;tiles<span class="k2">[</span>this-&gt;current_tile<span class="k2">]</span><span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> i<span class="k2">;</span> <span class="c">// row</span>
<span class="number"> 11</span>                        this-&gt;tiles<span class="k2">[</span>this-&gt;current_tile<span class="k2">]</span><span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> <span class="c">// the ID of the image                         </span>
<span class="number"> 12</span>                <span class="k2">}</span>
<span class="number"> 13</span>        <span class="k2">}</span>
</div></div><p>

How would you guys do this?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Some_Guy)</author>
		<pubDate>Sun, 15 Dec 2013 10:24:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I based my design on something I read on one gamedev site that I&#39;m not sure still has the article.</p><p>But basically, I had a couple lookup tables. something like the following:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">// assuming our tiles are 8x8 pixels</span>
<span class="number">  2</span><span class="k1">int</span> tile_map_table<span class="k2">[</span><span class="n">8</span><span class="k2">]</span><span class="k2">[</span><span class="n">8</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number">  3</span>   <span class="k2">{</span> <span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">2</span>, <span class="n">2</span>, <span class="n">2</span> <span class="k2">}</span>,
<span class="number">  4</span>   <span class="k2">{</span> <span class="n">1</span>, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">2</span>, <span class="n">2</span> <span class="k2">}</span>,
<span class="number">  5</span>   <span class="k2">{</span> <span class="n">1</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="n">2</span> <span class="k2">}</span>,
<span class="number">  6</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="n">0</span>, <span class="n">0</span> <span class="k2">}</span>,
<span class="number">  7</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="n">0</span>, <span class="n">0</span> <span class="k2">}</span>,
<span class="number">  8</span>   <span class="k2">{</span> <span class="n">3</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="n">4</span> <span class="k2">}</span>,
<span class="number">  9</span>   <span class="k2">{</span> <span class="n">3</span>, <span class="n">3</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">4</span> <span class="k2">}</span>,
<span class="number"> 10</span>   <span class="k2">{</span> <span class="n">3</span>, <span class="n">3</span>, <span class="n">3</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">4</span>, <span class="n">4</span> <span class="k2">}</span>,
<span class="number"> 11</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k1">int</span> tile_loc_map<span class="k2">[</span><span class="n">5</span><span class="k2">]</span><span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span> <span class="k2">}</span>, <span class="k2">{</span> <span class="k3">-</span><span class="n">1</span>, <span class="k3">-</span><span class="n">1</span> <span class="k2">}</span>, <span class="k2">{</span> <span class="n">1</span>, <span class="k3">-</span><span class="n">1</span> <span class="k2">}</span>, <span class="k2">{</span> <span class="k3">-</span><span class="n">1</span>, <span class="n">1</span> <span class="k2">}</span>, <span class="k2">{</span> <span class="n">1</span>, <span class="n">1</span> <span class="k2">}</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">=</span> <span class="n">100</span>, <a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number"> 16</span><span class="k1">int</span> tile_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">/</span> <span class="n">8</span><span class="k2">;</span>
<span class="number"> 17</span><span class="k1">int</span> tile_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">/</span> <span class="n">8</span><span class="k2">;</span>
<span class="number"> 18</span><span class="k1">int</span> loc_tile_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">&amp;</span> <span class="n">7</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k1">int</span> loc_tile_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">&amp;</span> <span class="n">7</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k1">int</span> iso_tile_x <span class="k3">=</span> tile_x <span class="k3">+</span> tile_loc_map<span class="k2">[</span>tile_map_table<span class="k2">[</span>loc_tile_y<span class="k2">]</span><span class="k2">[</span>loc_tile_x<span class="k2">]</span><span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k1">int</span> iso_tile_y <span class="k3">=</span> tile_y <span class="k3">+</span> tile_loc_map<span class="k2">[</span>tile_map_table<span class="k2">[</span>loc_tile_y<span class="k2">]</span><span class="k2">[</span>loc_tile_x<span class="k2">]</span><span class="k2">]</span><span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
</div></div><p>

It&#39;s something like that anyhow. iso_tile_x and iso_tile_y is the coords of the selected tile.</p><p>I&#39;d have pulled out my old iso engine code, but Its all stuck on a backup CD somewhere.</p><p>Hope that helps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sun, 15 Dec 2013 11:18:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Another way would be to use transformations.<br />Edit: I could elaborate further on that if you showed me your tile.<br />Edit: On wikipedia there is an article on how to do that without transformations: <a href="http://en.wikipedia.org/wiki/Video_games_with_isometric_graphics#Mapping_screen_to_world_coordinates">http://en.wikipedia.org/wiki/Video_games_with_isometric_graphics#Mapping_screen_to_world_coordinates</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aikei_c)</author>
		<pubDate>Sun, 15 Dec 2013 13:12:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@Thomas<br />In your example are you filling the array pixel by pixel?</p><p>@Aike<br />So far I&#39;ve been working with 32x32 tiles.<br />Based on what is explained in your link I made this</p><div class="source-code snippet"><div class="inner"><pre>
<span class="c">// tiles are 32x32</span>
<span class="c">// map is 30x30 </span>

<span class="k1">int</span> virtualTileX <span class="k3">=</span> x <span class="k3">/</span> <span class="n">32</span><span class="k2">;</span>
<span class="k1">int</span> virtualTileY <span class="k3">=</span> y <span class="k3">/</span> <span class="n">32</span><span class="k2">;</span>

<span class="k1">int</span> numberOfTilesInX <span class="k3">=</span> <span class="n">30</span><span class="k2">;</span>

<span class="k1">int</span> isoTileX <span class="k3">=</span> virtualTileX <span class="k3">-</span> <span class="k2">(</span>numberOfTilesInX <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">int</span> isoTileY <span class="k3">=</span> virtualTileX <span class="k3">-</span> <span class="k2">(</span>numberOfTilesInX <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

It doesn&#39;t work 100% but the pattern is there.<br />It just takes as 0,0 the tile #2 in the picture, instead the one in the top corner.</p><p>(My map is 30x30, this one is just an example)</p><p><span class="remote-thumbnail"><span class="json">{"name":"11392040083_c62b99616a_o.jpg","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/6\/86cd6d81989d9344399b4313512f240b.jpg","w":700,"h":369,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/6\/86cd6d81989d9344399b4313512f240b"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/8/6/86cd6d81989d9344399b4313512f240b-240.jpg" alt="11392040083_c62b99616a_o.jpg" width="240" height="126" /></span></p><p>I guess I just need to figure how to make that correction and it will be working.</p><p>EDIT: mmm now I check better the 0 in the X axis is not exactly in the middle of the row, but int the tile #13.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Some_Guy)</author>
		<pubDate>Mon, 16 Dec 2013 04:33:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613648/993955#target">Some_Guy</a> said:</div><div class="quote"><p>@Thomas<br />In your example are you filling the array pixel by pixel?</p></div></div><p>Yes. <span class="source-code">tile_map_table</span> is a map of each pixel in a tile to the offset needed to adjust the tile index location.</p><p>just doing a division and modulo of the mouse position only works for square tiles. You need to adjust those positions based on where the point is on the diamond shape.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 16 Dec 2013 05:08:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you use 32x32 tiles, they must be just 45 degrees rotated squares, right? In this case you just need to apply rotational transformation.
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> transform<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform,<a href="http://www.allegro.cc/manual/ALLEGRO_PI"><span class="a">ALLEGRO_PI</span></a><span class="k3">/</span><span class="n">4</span><span class="k2">)</span><span class="k2">;</span>

<span class="c">//later</span>
<span class="k1">float</span> isox<span class="k3">=</span>mousex<span class="k2">;</span>
<span class="k1">float</span> isoy<span class="k3">=</span>mousey<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>trans,<span class="k3">&amp;</span>isox,<span class="k3">&amp;</span>isoy<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

But that would be pure coordinates, if you need tile coordinates, you would need to divide that by your tile size in isometry, which in your case should be about 22.6272:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> tilex <span class="k3">=</span> isox<span class="k3">/</span><span class="n">22</span>.<span class="n">6272</span><span class="k2">;</span>
<span class="k1">int</span> tiley <span class="k3">=</span> isoy<span class="k3">/</span><span class="n">22</span>.<span class="n">6272</span><span class="k2">;</span>
</pre></div></div><p>

This should probably work. There might be some inconsistencies since your world coordinate grid and screen coordinate grid do not start at the same point.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aikei_c)</author>
		<pubDate>Mon, 16 Dec 2013 07:37:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can you please explain how to do it in A4?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Some_Guy)</author>
		<pubDate>Mon, 16 Dec 2013 15:46:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m not sure, but I believe you do it like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> isox <span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>PI<span class="k3">/</span><span class="n">4</span><span class="k2">)</span><span class="k3">*</span>mousex<span class="k2">)</span><span class="k3">+</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>PI<span class="k3">/</span><span class="n">4</span><span class="k2">)</span><span class="k3">*</span>mousey<span class="k2">)</span><span class="k2">;</span>
<span class="k1">float</span> isoy <span class="k3">=</span> <span class="k2">(</span><span class="k3">-</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>PI<span class="k3">/</span><span class="n">4</span><span class="k2">)</span><span class="k3">*</span>mousex<span class="k2">)</span><span class="k3">+</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>PI<span class="k3">/</span><span class="n">4</span><span class="k2">)</span><span class="k3">*</span>mousey<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Or you could just use Thomas&#39;s method. You do this by just dividing your map into squares by dividing mouse coordinates by tile size (32), in this square one isometric tile is in the center and four others are in the corners. You need to figure out which one is in the center, this will depend on where your coordinate grid starts. And then compare the (mousex/32; mousey/32) with the tile map table. This approach should be less computation intensitive, I think I heared that it mattered in the past but shouldn&#39;t matter now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aikei_c)</author>
		<pubDate>Mon, 16 Dec 2013 16:41:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This can be done much easier..<br />when the mouse ison the map, hide the mouse and enable a special tile selector.<br />place the tile selector on the tile closest to the mouse.</p><p>then move the tile selector according to the delta mouse movement
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ariesnl)</author>
		<pubDate>Mon, 16 Dec 2013 17:25:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613648/993973#target">Ariesnl</a> said:</div><div class="quote"><p>place the tile selector on the tile closest to the mouse.</p></div></div><p>

Am I missing something or I would be facing exactly the same problem than now? <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Some_Guy)</author>
		<pubDate>Mon, 16 Dec 2013 19:11:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://stackoverflow.com/questions/6915555/how-to-transform-mouse-location-in-isometric-tiling-map">http://stackoverflow.com/questions/6915555/how-to-transform-mouse-location-in-isometric-tiling-map</a></p><p>A way to transform coordinates to tile is given here in the accepted answer. I think it may be helpful.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Mon, 16 Dec 2013 19:25:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t know what is the problem but nothing seems to work for me.<br />Tried what your guys suggested plus everything in the first 6 or 7 google pages, I disabled everything cameras related to keep it simpler, but still can&#39;t get it working.<br />I will try to extract the relevant part of the code and post it here.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Some_Guy)</author>
		<pubDate>Tue, 17 Dec 2013 04:09:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I use the following function wich works if you give it the right mousemap for your tiles.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">/*!\fn ScreenToMap( int mx, int my, int *Tilex,int *Tiley,BITMAP *mousemap)</span>
<span class="number">  2</span><span class="c"> *</span>
<span class="number">  3</span><span class="c"> *\brief Convert screen coordinate to map coordinate</span>
<span class="number">  4</span><span class="c"> *</span>
<span class="number">  5</span><span class="c"> *\param mx The 'x' coordinate in pixel</span>
<span class="number">  6</span><span class="c"> *\param my The 'y' coordinate in pixel</span>
<span class="number">  7</span><span class="c"> *\param Tilex Output for the generated Tilex</span>
<span class="number">  8</span><span class="c"> *\param Tiley Output for the generated Tiley</span>
<span class="number">  9</span><span class="c"> *\param mousemap A mousemap with colors for one tile</span>
<span class="number"> 10</span><span class="c"> *</span>
<span class="number"> 11</span><span class="c"> *\return TRUE</span>
<span class="number"> 12</span><span class="c"> */</span>
<span class="number"> 13</span>
<span class="number"> 14</span><span class="k1">int</span> ScreenToMap<span class="k2">(</span> <span class="k1">int</span> mx, <span class="k1">int</span> my, <span class="k1">int</span> <span class="k3">*</span>Tilex, <span class="k1">int</span> <span class="k3">*</span>Tiley, <a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a> <span class="k3">*</span>mousemap <span class="k2">)</span>
<span class="number"> 15</span>    <span class="k2">{</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    <span class="c">/* SCREEN TO MAP VARIABLES */</span>
<span class="number"> 18</span>    <span class="k1">int</span> RegionX, RegionY,
<span class="number"> 19</span>    RegionDX <span class="k3">=</span> <span class="n">0</span>, RegionDY <span class="k3">=</span> <span class="n">0</span>,
<span class="number"> 20</span>                             MouseMapX, MouseMapY,
<span class="number"> 21</span>                             MouseMapWidth, MouseMapHeight, c<span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    MouseMapWidth <span class="k3">=</span> mousemap <span class="k3">-</span><span class="k3">&gt;</span> w<span class="k2">;</span>
<span class="number"> 24</span>    MouseMapHeight <span class="k3">=</span> mousemap <span class="k3">-</span><span class="k3">&gt;</span> h<span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    <span class="c">/* First step find out where we are on the mousemap */</span>
<span class="number"> 27</span>    RegionX <span class="k3">=</span> <span class="k2">(</span> mx <span class="k3">/</span> MouseMapWidth <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>    RegionY <span class="k3">=</span> <span class="k2">(</span> my <span class="k3">/</span> MouseMapHeight <span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">1</span><span class="k2">;</span> <span class="c">/* The multiplying by two is very important */</span>
<span class="number"> 29</span>
<span class="number"> 30</span>
<span class="number"> 31</span>    <span class="c">/* Second Step: Find out WHERE in the mousemap our mouse is, by finding MouseMapX and MouseMapY. */</span>
<span class="number"> 32</span>
<span class="number"> 33</span>    MouseMapX <span class="k3">=</span> mx % MouseMapWidth<span class="k2">;</span>
<span class="number"> 34</span>    MouseMapY <span class="k3">=</span> my % MouseMapHeight<span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span>    <span class="c">/* third step: Find the color in the mouse map */</span>
<span class="number"> 37</span>    c <span class="k3">=</span> <a href="http://www.allegro.cc/manual/getpixel"><span class="a">getpixel</span></a><span class="k2">(</span> mousemap, MouseMapX, MouseMapY <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>
<span class="number"> 39</span>    <span class="k1">if</span> <span class="k2">(</span> c <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">255</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"> 40</span>            RegionDX <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 41</span>            RegionDY <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 42</span>            <span class="k2">}</span>
<span class="number"> 43</span>
<span class="number"> 44</span>    <span class="k1">if</span> <span class="k2">(</span> c <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">255</span>, <span class="n">255</span>, <span class="n">0</span> <span class="k2">)</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 45</span>            RegionDX <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 46</span>            RegionDY <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 47</span>            <span class="k2">}</span>
<span class="number"> 48</span>
<span class="number"> 49</span>    <span class="k1">if</span> <span class="k2">(</span> c <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol"><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="k2">)</span> <span class="k2">{</span>
<span class="number"> 50</span>            RegionDX <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 51</span>            RegionDY <span class="k3">=</span> <span class="n">0</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">if</span> <span class="k2">(</span> c <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">0</span>, <span class="n">255</span>, <span class="n">0</span> <span class="k2">)</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 55</span>            RegionDX <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 56</span>            RegionDY <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 57</span>            <span class="k2">}</span>
<span class="number"> 58</span>
<span class="number"> 59</span>    <span class="k1">if</span> <span class="k2">(</span> c <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span> <span class="k2">)</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 60</span>            RegionDX <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 61</span>            RegionDY <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 62</span>            <span class="k2">}</span>
<span class="number"> 63</span>
<span class="number"> 64</span>    <span class="k3">*</span>Tilex <span class="k3">=</span> <span class="k2">(</span> RegionDX <span class="k3">+</span> RegionX <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 65</span>    <span class="k3">*</span>Tiley <span class="k3">=</span> <span class="k2">(</span> RegionDY <span class="k3">+</span> RegionY <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>
<span class="number"> 67</span>
<span class="number"> 68</span>    <span class="k1">return</span> TRUE<span class="k2">;</span>
<span class="number"> 69</span>
<span class="number"> 70</span>    <span class="k2">}</span> <span class="c">/* ScreenToMap( ... ) */</span>
</div></div><p>

Here is some code for drawing the needed mousemap:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">/* Drawing the mousemap */</span>
<span class="number">  2</span>    <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> mousemap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap"><span class="a">create_bitmap</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> TILEW , <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> TILEH <span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>    <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> colortile <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap"><span class="a">create_bitmap</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> TILEW , <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> TILEH <span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>    <a href="http://www.allegro.cc/manual/clear_to_color"><span class="a">clear_to_color</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> mousemap , <a href="http://www.allegro.cc/manual/makecol"><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="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>    <a href="http://www.allegro.cc/manual/clear_to_color"><span class="a">clear_to_color</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> colortile , <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> bgcolor <span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>    <span class="c">/* drawing mousemap */</span>
<span class="number">  9</span>    <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> mousemap , <span class="n">0</span> , <span class="k2">(</span> TILEH <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">1</span> <span class="k2">)</span> <span class="k3">-</span> <span class="n">2</span> , <span class="k2">(</span> TILEW <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">1</span> <span class="k2">)</span> <span class="k3">-</span> <span class="n">3</span> , <span class="n">0</span> , <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">255</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"> 10</span>    <a href="http://www.allegro.cc/manual/floodfill"><span class="a">floodfill</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> mousemap , <span class="n">1</span> , <span class="n">1</span> , <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">255</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"> 11</span>
<span class="number"> 12</span>    <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> mousemap , <span class="k2">(</span> TILEW <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">1</span> <span class="k2">)</span> <span class="k3">-</span> <span class="n">3</span> , TILEH <span class="k3">-</span> <span class="n">1</span> , <span class="n">0</span> , <span class="k2">(</span> TILEH <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">1</span> <span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span> , <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">0</span> , <span class="n">255</span> , <span class="n">0</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>    <a href="http://www.allegro.cc/manual/floodfill"><span class="a">floodfill</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> mousemap , <span class="n">1</span> , TILEH <span class="k3">-</span> <span class="n">2</span> , <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">0</span>, <span class="n">255</span>, <span class="n">0</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> mousemap , <span class="k2">(</span> TILEW <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">1</span> <span class="k2">)</span> <span class="k3">+</span> <span class="n">2</span> , TILEH <span class="k3">-</span> <span class="n">1</span> , TILEW <span class="k3">-</span> <span class="n">1</span> , <span class="k2">(</span> TILEH <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">1</span> <span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span> , <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    <a href="http://www.allegro.cc/manual/floodfill"><span class="a">floodfill</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> mousemap , TILEW <span class="k3">-</span> <span class="n">2</span> , TILEH <span class="k3">-</span> <span class="n">1</span> , <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>    <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> mousemap , <span class="k2">(</span> TILEW <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">1</span> <span class="k2">)</span> <span class="k3">+</span> <span class="n">2</span> , <span class="n">0</span> , TILEW <span class="k3">-</span> <span class="n">1</span> , <span class="k2">(</span> TILEH <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">1</span> <span class="k2">)</span> <span class="k3">-</span> <span class="n">2</span> , <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">255</span>, <span class="n">255</span> , <span class="n">0</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>    <a href="http://www.allegro.cc/manual/floodfill"><span class="a">floodfill</span></a><span class="k2">(</span> <span class="k2">(</span> <span class="k3">*</span>map <span class="k2">)</span> <span class="k3">-</span><span class="k3">&gt;</span> mousemap , TILEW <span class="k3">-</span> <span class="n">1</span> , <span class="n">0</span> , <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span> <span class="n">255</span>, <span class="n">255</span>, <span class="n">0</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
</div></div><p>

Please note that you only need to preload mousemap bitmap one time.</p><p>In the code when I need to know which tile I&#39;m on, I&#39;m just doing this (considering it also has scrolling):
</p><div class="source-code snippet"><div class="inner"><pre>ScreenToMap<span class="k2">(</span> <a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">-</span> <span class="k2">(</span>buffer <span class="k3">-</span><span class="k3">&gt;</span> w <span class="k3">-</span> mapbuffer <span class="k3">-</span><span class="k3">&gt;</span> w <span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span> map-&gt;TILEW <span class="k2">)</span> <span class="k3">+</span> map-&gt;X, 
<a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">-</span> <span class="k2">(</span>buffer <span class="k3">-</span><span class="k3">&gt;</span> h <span class="k3">-</span> mapbuffer <span class="k3">-</span><span class="k3">&gt;</span> h <span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span> map-&gt;TILEH <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">1</span> <span class="k2">)</span> <span class="k3">+</span> map-&gt;Y, 
<span class="k3">&amp;</span>a , <span class="k3">&amp;</span>b , map <span class="k3">-</span><span class="k3">&gt;</span> mousemap <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>


I coded this from some gamedev articles:<br /><a href="http://archive.gamedev.net/archive/reference/list56f4.html?categoryid=198">http://archive.gamedev.net/archive/reference/list56f4.html?categoryid=198</a></p><p>particularly:<br /><a href="http://archive.gamedev.net/archive/reference/articles/article747.html">http://archive.gamedev.net/archive/reference/articles/article747.html</a><br /><a href="http://archive.gamedev.net/archive/reference/articles/article748.html">http://archive.gamedev.net/archive/reference/articles/article748.html</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Tue, 17 Dec 2013 05:49:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you GullRaDriel, I will try it next, but I would like to show you guys what I have right now.</p><p>According <a href="http://stackoverflow.com/questions/6915555/how-to-transform-mouse-location-in-isometric-tiling-map/13838164#13838164">http://stackoverflow.com/questions/6915555/how-to-transform-mouse-location-in-isometric-tiling-map/13838164#13838164</a></p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>

<span class="remote-thumbnail"><span class="json">{"name":"B0TVn.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/b\/cbec5f1fbb7b29c55bcb7d0cf1363225.png","w":390,"h":202,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/b\/cbec5f1fbb7b29c55bcb7d0cf1363225"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/c/b/cbec5f1fbb7b29c55bcb7d0cf1363225-240.jpg" alt="B0TVn.png" width="240" height="124" /></span></p><p>I rendered the tiles like above.</p><p>the sollution is VERY simple!</p><p>first thing:</p><p>my Tile width and height are both = 32 this means that in isometric view, the width = 32 and height = 16! Mapheight in this case is 5 (max. Y value)</p><p>y_iso &amp; x_iso == 0 when y_mouse=MapHeight/tilewidth/2 and x_mouse = 0</p><p>when x_mouse +=1, y_iso -=1</p><p>so first of all I calculate the &quot;per-pixel transformation&quot;</p><p>TileY = ((y_mouse*2)-((MapHeight*tilewidth)/2)+x_mouse)/2;</p><p>TileX = x_mouse-TileY;</p><p>to find the tile coordinates I just devide both by tilewidth</p><p>TileY = TileY/32; TileX = TileX/32;</p><p>DONE!! never had any problems!</p></div></div><p>

My code
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> r_y <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a><span class="k3">*</span><span class="n">2</span><span class="k2">)</span><span class="k3">-</span><span class="k2">(</span><span class="k2">(</span><span class="n">29</span><span class="k3">*</span><span class="n">32</span><span class="k2">)</span><span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a><span class="k2">)</span><span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="k1">int</span> r_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">-</span> r_y<span class="k2">;</span>
r_y <span class="k3">=</span> <span class="k2">(</span>r_y<span class="k2">)</span> <span class="k3">/</span> <span class="n">32</span><span class="k2">;</span>
r_x <span class="k3">=</span> <span class="k2">(</span>r_x<span class="k2">)</span> <span class="k3">/</span> <span class="n">32</span><span class="k2">;</span>
</pre></div></div><p>

My tiles are 32x32 same as in the example, but they don&#39;t change the width/height relation.</p><p>This is how I&#39;m rendering them (30x30 map)
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>i <span class="k3">&lt;</span> this-&gt;total_tiles<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> 
<span class="k2">{</span>
    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>j <span class="k3">&lt;</span> this-&gt;total_tiles<span class="k2">;</span>j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> 
    <span class="k2">{</span>
        this-&gt;tile_x <span class="k3">=</span> <span class="k2">(</span>j <span class="k3">*</span> <span class="k2">(</span>this-&gt;tile_w <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span>i <span class="k3">*</span> <span class="k2">(</span>this-&gt;tile_w <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> 
        this-&gt;tile_y <span class="k3">=</span> <span class="k2">(</span>i <span class="k3">*</span> <span class="k2">(</span>this-&gt;tile_h <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> <span class="k2">(</span>j <span class="k3">*</span> <span class="k2">(</span>this-&gt;tile_h <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> 
    <span class="k2">}</span>

    <a href="http://www.allegro.cc/manual/draw_sprite"><span class="a">draw_sprite</span></a><span class="k2">(</span>this-&gt;buffer, this-&gt;tile1, this-&gt;tile_x, this-&gt;tile_y<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

And this is what I get<br /><span class="remote-thumbnail"><span class="json">{"name":"11411734803_b0a23afc7a_o.jpg","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/4\/54b523d1eae42e58b4f65f4651730062.jpg","w":973,"h":610,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/4\/54b523d1eae42e58b4f65f4651730062"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/5/4/54b523d1eae42e58b4f65f4651730062-240.jpg" alt="11411734803_b0a23afc7a_o.jpg" width="240" height="150" /></span></p><p>Screen to map conversion isn&#39;t working.<br />At 0,0 gives me 7,-7.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Some_Guy)</author>
		<pubDate>Tue, 17 Dec 2013 07:33:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This should not be that hard.</p><p>This can be solved with simple linear equations, transformations, and inequalities. First decide where on your map the isometric coordinate (0.0,0.0) is. For arbitrariness&#39;s sake make the positive x-axis going up and to the right, and the positive y axis going up and to the left in isometric space. </p><p>These coordinates will be known as isomap_world_x, and isomap_world_y in world space. We need to first change from screen space to world space, and then from world space to iso space.</p><p>A brief explanation of the method used - first find the equation of the line of the iso x-axis in real space. (y = (H/W)*x). Replace y by the expression (y - N*H) where N is the x coord in iso space and then solve for N. Repeat for the equation of the line of the iso y-axis in real space. Once you have both solved, combine them and then solve for the xy coords from the iso coords.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">float</span> mousex <span class="k3">=</span> ev.mouse.x<span class="k2">;</span>
<span class="number">  2</span><span class="k1">float</span> mousey <span class="k3">=</span> ev.mouse.y<span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="c">// change from screen space to world space</span>
<span class="number">  5</span>mousex <span class="k3">-</span><span class="k3">=</span> camerax<span class="k2">;</span>
<span class="number">  6</span>mousey <span class="k3">-</span><span class="k3">=</span> cameray<span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="c">// Make mouse position relative to iso 0,0</span>
<span class="number">  9</span>mousex <span class="k3">-</span><span class="k3">=</span> isomap_world_x<span class="k2">;</span>
<span class="number"> 10</span>mousey <span class="k3">-</span><span class="k3">=</span> isomap_world_y<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="c">// invert mouse so it matches iso space</span>
<span class="number"> 13</span>mousey <span class="k3">*</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="c">// mouse space is now +y up and +x right, and relative to iso 0,0</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="c">// now convert to iso using these formulas :</span>
<span class="number"> 18</span>mouseisox <span class="k3">=</span> mousex<span class="k3">/</span>ISO_TILE_WIDTH <span class="k3">+</span> mousey<span class="k3">/</span>ISO_TILE_HEIGHT<span class="k2">;</span>
<span class="number"> 19</span>mouseisoy <span class="k3">=</span> mousey<span class="k3">/</span>ISO_TILE_HEIGHT <span class="k3">-</span> mousex<span class="k3">/</span>ISO_TILE_WIDTH<span class="k2">;</span>
</div></div><p>

The tricky part is converting back from iso to screen space, but easy enough if you figure out the equations for iso space from screen space.
</p><div class="source-code snippet"><div class="inner"><pre>mousex <span class="k3">=</span> <span class="k2">(</span>ISO_TILE_WIDTH<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span><span class="k2">(</span>isox <span class="k3">-</span> isoy<span class="k2">)</span><span class="k2">;</span>
mousey <span class="k3">=</span> <span class="k2">(</span>ISO_TILE_HEIGHT<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span><span class="k2">(</span>isox <span class="k3">+</span> isoy<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>

mousey <span class="k3">*</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>

mousex <span class="k3">+</span><span class="k3">=</span> isomap_world_x<span class="k2">;</span>
mousey <span class="k3">+</span><span class="k3">=</span> isomap_world_y<span class="k2">;</span>

mousex <span class="k3">+</span><span class="k3">=</span> camerax<span class="k2">;</span>
mousey <span class="k3">+</span><span class="k3">=</span> cameray<span class="k2">;</span>
</pre></div></div><p>

I wanted to solve this so bad I made an example proggie. Here ya go!</p><p><a href="https://www.allegro.cc/files/attachment/608178">IsoMap.7z</a> Binary, source, and data. <a href="http://www.7-zip.org/">7-zip</a> (archiver program for 7z files).</p><p>Obligatory screenie :<br /><span class="remote-thumbnail"><span class="json">{"name":"608177","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/7\/c\/7c55485273d058cca25e2de1b1af8b16.png","w":812,"h":632,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/7\/c\/7c55485273d058cca25e2de1b1af8b16"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/7/c/7c55485273d058cca25e2de1b1af8b16-240.jpg" alt="608177" width="240" height="186" /></span></p><p>And the full source code :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;allegro5/allegro_ttf.h&gt;</span>
<span class="number">   7</span>
<span class="number">   8</span><span class="p">#include &lt;cstdio&gt;</span>
<span class="number">   9</span><span class="p">#include &lt;cmath&gt;</span>
<span class="number">  10</span><span class="p">#include &lt;exception&gt;</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="k1">using</span> std::exception<span class="k2">;</span>
<span class="number">  13</span><span class="c">///typedef std::exception GameException;</span>
<span class="number">  14</span>
<span class="number">  15</span><span class="k1">class</span> GameException <span class="k2">:</span> <span class="k1">public</span> exception <span class="k2">{</span>
<span class="number">  16</span>   <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> str<span class="k2">;</span>
<span class="number">  17</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number">  18</span>   GameException<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> s<span class="k2">)</span> <span class="k2">:</span> str<span class="k2">(</span>s<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  19</span>   
<span class="number">  20</span>   <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> what<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> str<span class="k2">;</span><span class="k2">}</span>
<span class="number">  21</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="k1">class</span> POINT <span class="k2">{</span>
<span class="number">  24</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number">  25</span>   <span class="k1">float</span> x<span class="k2">;</span>
<span class="number">  26</span>   <span class="k1">float</span> y<span class="k2">;</span>
<span class="number">  27</span>   
<span class="number">  28</span>   POINT<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> x<span class="k2">(</span><span class="n">0</span>.<span class="n">0f</span><span class="k2">)</span> , y<span class="k2">(</span><span class="n">0</span>.<span class="n">0f</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  29</span>   POINT<span class="k2">(</span><span class="k1">float</span> xpos , <span class="k1">float</span> ypos<span class="k2">)</span> <span class="k2">:</span> x<span class="k2">(</span>xpos<span class="k2">)</span> , y<span class="k2">(</span>ypos<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  30</span>   
<span class="number">  31</span>   POINT<span class="k3">&amp;</span> SetPoint<span class="k2">(</span><span class="k1">float</span> xpos , <span class="k1">float</span> ypos<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  32</span>      x <span class="k3">=</span> xpos<span class="k2">;</span>
<span class="number">  33</span>      y <span class="k3">=</span> ypos<span class="k2">;</span>
<span class="number">  34</span>      <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number">  35</span>   <span class="k2">}</span>
<span class="number">  36</span>   
<span class="number">  37</span>   POINT operator-<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  38</span>      POINT r<span class="k2">;</span>
<span class="number">  39</span>      r.x <span class="k3">=</span> <span class="k3">-</span>x<span class="k2">;</span>
<span class="number">  40</span>      r.y <span class="k3">=</span> <span class="k3">-</span>y<span class="k2">;</span>
<span class="number">  41</span>      <span class="k1">return</span> r<span class="k2">;</span>
<span class="number">  42</span>   <span class="k2">}</span>
<span class="number">  43</span>   POINT <span class="k1">operator</span><span class="k3">+</span><span class="k2">(</span>POINT<span class="k3">&amp;</span> p<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  44</span>      POINT r <span class="k3">=</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number">  45</span>      r.x <span class="k3">+</span><span class="k3">=</span> p.x<span class="k2">;</span>
<span class="number">  46</span>      r.y <span class="k3">+</span><span class="k3">=</span> p.y<span class="k2">;</span>
<span class="number">  47</span>      <span class="k1">return</span> r<span class="k2">;</span>
<span class="number">  48</span>   <span class="k2">}</span>
<span class="number">  49</span>   POINT<span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">+</span><span class="k3">=</span><span class="k2">(</span>POINT<span class="k3">&amp;</span> p<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  50</span>      <span class="k3">*</span><span class="k1">this</span> <span class="k3">=</span> <span class="k3">*</span><span class="k1">this</span> <span class="k3">+</span> p<span class="k2">;</span>
<span class="number">  51</span>      <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number">  52</span>   <span class="k2">}</span>
<span class="number">  53</span>   POINT operator-<span class="k2">(</span>POINT<span class="k3">&amp;</span> p<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  54</span>      POINT r <span class="k3">=</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number">  55</span>      r.x <span class="k3">-</span><span class="k3">=</span> p.x<span class="k2">;</span>
<span class="number">  56</span>      r.y <span class="k3">-</span><span class="k3">=</span> p.y<span class="k2">;</span>
<span class="number">  57</span>      <span class="k1">return</span> r<span class="k2">;</span>
<span class="number">  58</span>   <span class="k2">}</span>
<span class="number">  59</span>   POINT<span class="k3">&amp;</span> operator-<span class="k3">=</span><span class="k2">(</span>POINT<span class="k3">&amp;</span> p<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  60</span>      <span class="k3">*</span><span class="k1">this</span> <span class="k3">=</span> <span class="k3">*</span><span class="k1">this</span> <span class="k3">-</span> p<span class="k2">;</span>
<span class="number">  61</span>      <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number">  62</span>   <span class="k2">}</span>
<span class="number">  63</span>   
<span class="number">  64</span>   <span class="k1">friend</span> <span class="k1">bool</span> OnSameTile<span class="k2">(</span>POINT p1 , POINT p2<span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  66</span>
<span class="number">  67</span><span class="k1">bool</span> OnSameTile<span class="k2">(</span>POINT p1 , POINT p2<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  68</span>   <span class="k1">return</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_330.html" target="_blank">floor</a><span class="k2">(</span>p1.x<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_330.html" target="_blank">floor</a><span class="k2">(</span>p2.x<span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_330.html" target="_blank">floor</a><span class="k2">(</span>p1.y<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_330.html" target="_blank">floor</a><span class="k2">(</span>p2.y<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span><span class="k2">}</span>
<span class="number">  70</span>
<span class="number">  71</span><span class="k1">class</span> IsometricWorld <span class="k2">{</span>
<span class="number">  72</span>   
<span class="number">  73</span><span class="k1">private</span> <span class="k2">:</span>
<span class="number">  74</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> display<span class="k2">;</span>
<span class="number">  75</span>   
<span class="number">  76</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> queue<span class="k2">;</span>
<span class="number">  77</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> timer<span class="k2">;</span>
<span class="number">  78</span>   
<span class="number">  79</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">;</span>
<span class="number">  80</span>   
<span class="number">  81</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> tile1<span class="k2">;</span>
<span class="number">  82</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> tile2<span class="k2">;</span>
<span class="number">  83</span>   
<span class="number">  84</span>   <span class="k1">float</span> SCREENWIDTH<span class="k2">;</span>
<span class="number">  85</span>   <span class="k1">float</span> SCREENHEIGHT<span class="k2">;</span>
<span class="number">  86</span>   
<span class="number">  87</span>   <span class="k1">float</span> NUMTILESWIDE<span class="k2">;</span>
<span class="number">  88</span>   <span class="k1">float</span> NUMTILESTALL<span class="k2">;</span>
<span class="number">  89</span>   
<span class="number">  90</span>   <span class="k1">float</span> ISOTILEWIDTH<span class="k2">;</span>
<span class="number">  91</span>   <span class="k1">float</span> ISOTILEHEIGHT<span class="k2">;</span>
<span class="number">  92</span>   
<span class="number">  93</span>   POINT l,r,t,b,c<span class="k2">;</span>
<span class="number">  94</span>   
<span class="number">  95</span>   POINT camPos<span class="k2">;</span>
<span class="number">  96</span>   POINT isoWorldPos<span class="k2">;</span>
<span class="number">  97</span>   
<span class="number">  98</span>   POINT msPos<span class="k2">;</span>
<span class="number">  99</span>   
<span class="number"> 100</span>   
<span class="number"> 101</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number"> 102</span>   
<span class="number"> 103</span>   IsometricWorld<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span>
<span class="number"> 104</span>         display<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number"> 105</span>         queue<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number"> 106</span>         timer<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number"> 107</span>         <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number"> 108</span>         tile1<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number"> 109</span>         tile2<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number"> 110</span>         SCREENWIDTH<span class="k2">(</span><span class="n">800</span><span class="k2">)</span>,
<span class="number"> 111</span>         SCREENHEIGHT<span class="k2">(</span><span class="n">600</span><span class="k2">)</span>,
<span class="number"> 112</span>         NUMTILESWIDE<span class="k2">(</span><span class="n">4</span><span class="k2">)</span>,
<span class="number"> 113</span>         NUMTILESTALL<span class="k2">(</span><span class="n">4</span><span class="k2">)</span>,
<span class="number"> 114</span>         ISOTILEWIDTH<span class="k2">(</span>SCREENWIDTH<span class="k3">/</span>NUMTILESWIDE<span class="k2">)</span>,
<span class="number"> 115</span>         ISOTILEHEIGHT<span class="k2">(</span>SCREENHEIGHT<span class="k3">/</span>NUMTILESTALL<span class="k2">)</span>,
<span class="number"> 116</span>         l<span class="k2">(</span><span class="k2">)</span>,r<span class="k2">(</span><span class="k2">)</span>,t<span class="k2">(</span><span class="k2">)</span>,b<span class="k2">(</span><span class="k2">)</span>,c<span class="k2">(</span><span class="k2">)</span>,
<span class="number"> 117</span>         camPos<span class="k2">(</span><span class="n">0</span>.<span class="n">0f</span> , <span class="n">0</span>.<span class="n">0f</span><span class="k2">)</span>,
<span class="number"> 118</span>         isoWorldPos<span class="k2">(</span>SCREENWIDTH<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span> , SCREENHEIGHT<span class="k2">)</span>
<span class="number"> 119</span>   <span class="k2">{</span>
<span class="number"> 120</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>                   <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to initialize allegro 5."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 121</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>       <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to init image addon."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 122</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>  <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to init primitives addon."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 123</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>        <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to init font addon."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 124</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>         <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to init ttf addon."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 125</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>       <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to install keyboard."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 126</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>          <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to install mouse."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 127</span>      
<span class="number"> 128</span>      <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL <span class="k3">|</span> ALLEGRO_WINDOWED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</span>      display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>SCREENWIDTH , SCREENHEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>      
<span class="number"> 131</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to create display."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 132</span>      
<span class="number"> 133</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</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"> 134</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>      
<span class="number"> 136</span>      timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k3">/</span><span class="n">60</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>timer<span class="k2">)</span> <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to create timer."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 138</span>      
<span class="number"> 139</span>      queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>queue<span class="k2">)</span> <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to create event queue."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 141</span>      
<span class="number"> 142</span>      <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue , <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>      <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue , <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 144</span>      <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue , <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 145</span>      
<span class="number"> 146</span>      <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"verdana.ttf"</span> , <span class="n">24</span> , <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 147</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span> <span class="k2">{</span><span class="k1">throw</span> GameException<span class="k2">(</span><span class="s">"Failed to load font."</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 148</span>      
<span class="number"> 149</span>      tile1 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>ISOTILEWIDTH , ISOTILEHEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 150</span>      tile2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>ISOTILEWIDTH , ISOTILEHEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>      
<span class="number"> 152</span>      l.SetPoint<span class="k2">(</span><span class="n">0</span>.<span class="n">0f</span> , ISOTILEHEIGHT<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>      r.SetPoint<span class="k2">(</span>ISOTILEWIDTH , ISOTILEHEIGHT<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>      t.SetPoint<span class="k2">(</span>ISOTILEWIDTH<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span> , <span class="n">0</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 155</span>      b.SetPoint<span class="k2">(</span>ISOTILEWIDTH<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span> , ISOTILEHEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>      c.SetPoint<span class="k2">(</span>ISOTILEWIDTH<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span> , ISOTILEHEIGHT<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>      
<span class="number"> 158</span>      
<span class="number"> 159</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> c1 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">192</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 160</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> c2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">64</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>      <span class="k1">float</span> thickness <span class="k3">=</span> <span class="n">10</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 162</span>      
<span class="number"> 163</span>      <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>tile1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>      
<span class="number"> 165</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><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="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>      <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>l.x , l.y , t.x , t.y , c1 , thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 167</span>      <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>l.x , l.y , b.x , b.y , c1 , thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 168</span>      <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>r.x , r.y , t.x , t.y , c1 , thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>      <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>r.x , r.y , b.x , b.y , c1 , thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 170</span>      
<span class="number"> 171</span>      <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>tile2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 172</span>      
<span class="number"> 173</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><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="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 174</span>      <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>l.x , l.y , t.x , t.y , c1 , thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span>      <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>l.x , l.y , b.x , b.y , c1 , thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 176</span>      <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>r.x , r.y , t.x , t.y , c1 , thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 177</span>      <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>r.x , r.y , b.x , b.y , c1 , thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 178</span>      <a href="http://www.allegro.cc/manual/al_draw_filled_triangle"><span class="a">al_draw_filled_triangle</span></a><span class="k2">(</span>l.x , l.y , t.x , t.y , c.x , c.y , c2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 179</span>      <a href="http://www.allegro.cc/manual/al_draw_filled_triangle"><span class="a">al_draw_filled_triangle</span></a><span class="k2">(</span>r.x , r.y , t.x , t.y , c.x , c.y , c2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 180</span>      <a href="http://www.allegro.cc/manual/al_draw_filled_triangle"><span class="a">al_draw_filled_triangle</span></a><span class="k2">(</span>l.x , l.y , b.x , b.y , c.x , c.y , c2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 181</span>      <a href="http://www.allegro.cc/manual/al_draw_filled_triangle"><span class="a">al_draw_filled_triangle</span></a><span class="k2">(</span>r.x , r.y , b.x , b.y , c.x , c.y , c2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 182</span>      
<span class="number"> 183</span>      <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 184</span>   <span class="k2">}</span>
<span class="number"> 185</span>   
<span class="number"> 186</span>   <span class="k1">void</span> DrawBitmapCenteredOn<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bmp , POINT p<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 187</span>      p.x <span class="k3">-</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 188</span>      p.y <span class="k3">-</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 189</span>      
<span class="number"> 190</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bmp , p.x , p.y , <span class="n">0</span><span class="k2">)</span><span class="k2">;</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> Run<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 194</span>      <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>      <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 196</span>      
<span class="number"> 197</span>      <span class="k1">while</span><span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 198</span>         <span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 199</span>            <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</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"> 200</span>            POINT isoMsPos <span class="k3">=</span> ScreenCoordsToIsoCoords<span class="k2">(</span>msPos<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span>            <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> tiley <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> tiley <span class="k3">&lt;</span> NUMTILESTALL <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>tiley<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 202</span>               <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> tilex <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> tilex <span class="k3">&lt;</span> NUMTILESWIDE <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>tilex<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 203</span>                  POINT isoPt<span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>tilex <span class="k3">+</span> <span class="n">0</span>.<span class="n">5f</span> , <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>tiley <span class="k3">+</span> <span class="n">0</span>.<span class="n">5f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 204</span>                  POINT worldPt <span class="k3">=</span> IsoCoordsToScreenCoords<span class="k2">(</span>isoPt<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 205</span>                  
<span class="number"> 206</span>                  <span class="k1">if</span> <span class="k2">(</span>OnSameTile<span class="k2">(</span>isoPt , isoMsPos<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 207</span>                     DrawBitmapCenteredOn<span class="k2">(</span>tile2 , worldPt<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 208</span>                  <span class="k2">}</span>
<span class="number"> 209</span>                  <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 210</span>                     DrawBitmapCenteredOn<span class="k2">(</span>tile1 , worldPt<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 211</span>                  <span class="k2">}</span>
<span class="number"> 212</span>               <span class="k2">}</span>
<span class="number"> 213</span>            <span class="k2">}</span>
<span class="number"> 214</span>            
<span class="number"> 215</span>            <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</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="n">10</span> , <span class="n">10</span> , <span class="n">0</span> , <span class="s">"   msPos = %3.1f , %3.1f"</span> , msPos.x , msPos.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 216</span>            <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</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="n">10</span> , <span class="n">50</span> , <span class="n">0</span> , <span class="s">"isoMsPos = %3.1f , %3.1f"</span> , isoMsPos.x , isoMsPos.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 217</span>            
<span class="number"> 218</span>            <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</span>            redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 220</span>         <span class="k2">}</span>
<span class="number"> 221</span>         
<span class="number"> 222</span>         <span class="k1">do</span> <span class="k2">{</span>
<span class="number"> 223</span>            <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number"> 224</span>            <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>queue , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 225</span>            <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 226</span>            
<span class="number"> 227</span>            <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 228</span>               msPos.SetPoint<span class="k2">(</span>ev.mouse.x , ev.mouse.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>               redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 230</span>            <span class="k2">}</span>
<span class="number"> 231</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 232</span>               redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 233</span>            <span class="k2">}</span>
<span class="number"> 234</span>            
<span class="number"> 235</span>            
<span class="number"> 236</span>            <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 237</span>               <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 238</span>               <span class="k1">switch</span> <span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 239</span>                  <span class="k1">case</span> ALLEGRO_KEY_UP <span class="k2">:</span>
<span class="number"> 240</span>                     
<span class="number"> 241</span>                     <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 242</span>                  <span class="k1">case</span> ALLEGRO_KEY_DOWN <span class="k2">:</span>
<span class="number"> 243</span>                     
<span class="number"> 244</span>                     <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 245</span>                  <span class="k1">case</span> ALLEGRO_KEY_LEFT <span class="k2">:</span>
<span class="number"> 246</span>                     
<span class="number"> 247</span>                     <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 248</span>                  <span class="k1">case</span> ALLEGRO_KEY_RIGHT <span class="k2">:</span>
<span class="number"> 249</span>                     
<span class="number"> 250</span>                     <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 251</span>                  <span class="k1">default</span> <span class="k2">:</span>
<span class="number"> 252</span>                     
<span class="number"> 253</span>                     <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 254</span>               <span class="k2">}</span>
<span class="number"> 255</span>            <span class="k2">}</span>
<span class="number"> 256</span>            
<span class="number"> 257</span>         <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 258</span>      <span class="k2">}</span>
<span class="number"> 259</span>   <span class="k2">}</span>
<span class="number"> 260</span>   
<span class="number"> 261</span><span class="c">///   POINT ScreenCoordsToIsoCoords(POINT p);</span>
<span class="number"> 262</span><span class="c">///   POINT IsoCoordsToScreenCoords(POINT p);</span>
<span class="number"> 263</span>   POINT ScreenCoordsToIsoCoords<span class="k2">(</span>POINT scr<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 264</span>      scr <span class="k3">-</span><span class="k3">=</span> isoWorldPos<span class="k2">;</span>
<span class="number"> 265</span>      scr.y <span class="k3">=</span> <span class="k3">-</span>scr.y<span class="k2">;</span>
<span class="number"> 266</span>      POINT iso<span class="k2">;</span>
<span class="number"> 267</span>      iso.x <span class="k3">=</span> scr.x<span class="k3">/</span>ISOTILEWIDTH <span class="k3">+</span> scr.y<span class="k3">/</span>ISOTILEHEIGHT<span class="k2">;</span>
<span class="number"> 268</span>      iso.y <span class="k3">=</span> scr.y<span class="k3">/</span>ISOTILEHEIGHT <span class="k3">-</span> scr.x<span class="k3">/</span>ISOTILEWIDTH<span class="k2">;</span>
<span class="number"> 269</span>      <span class="k1">return</span> iso<span class="k2">;</span>
<span class="number"> 270</span>   <span class="k2">}</span>
<span class="number"> 271</span>   POINT IsoCoordsToScreenCoords<span class="k2">(</span>POINT iso<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 272</span>      POINT scr<span class="k2">;</span>
<span class="number"> 273</span>      scr.x <span class="k3">=</span> <span class="k2">(</span>ISOTILEWIDTH<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span><span class="k2">(</span>iso.x <span class="k3">-</span> iso.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 274</span>      scr.y <span class="k3">=</span> <span class="k2">(</span>ISOTILEHEIGHT<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span><span class="k2">(</span>iso.x <span class="k3">+</span> iso.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 275</span>      scr.y <span class="k3">=</span> <span class="k3">-</span>scr.y<span class="k2">;</span>
<span class="number"> 276</span>      scr <span class="k3">+</span><span class="k3">=</span> isoWorldPos<span class="k2">;</span>
<span class="number"> 277</span>      <span class="k1">return</span> scr<span class="k2">;</span>
<span class="number"> 278</span>   <span class="k2">}</span>
<span class="number"> 279</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 280</span>
<span class="number"> 281</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 282</span>   IsometricWorld<span class="k3">*</span> world <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 283</span>   
<span class="number"> 284</span>   <span class="k1">try</span> <span class="k2">{</span>
<span class="number"> 285</span>      world <span class="k3">=</span> <span class="k1">new</span> IsometricWorld<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 286</span>      world-&gt;Run<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 287</span>   <span class="k2">}</span>
<span class="number"> 288</span>   <span class="k1">catch</span> <span class="k2">(</span>GameException e<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 289</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Error - %s\n"</span> , e.what<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 290</span>   <span class="k2">}</span>
<span class="number"> 291</span>   
<span class="number"> 292</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 293</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 17 Dec 2013 16:22:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613648/994005#target">Some_Guy</a> said:</div><div class="quote"><p>At 0,0 gives me 7,-7.</p></div></div><p>
Well, judging from the picture, (0,0) on the screen does seem likely to be at (7; -7) in isometry...<br />If you draw it like this:
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>j <span class="k3">&lt;</span> this-&gt;total_tiles<span class="k2">;</span>j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> 
    <span class="k2">{</span>
        this-&gt;tile_x <span class="k3">=</span> <span class="k2">(</span>j <span class="k3">*</span> <span class="k2">(</span>this-&gt;tile_w <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span>i <span class="k3">*</span> <span class="k2">(</span>this-&gt;tile_w <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> 
        this-&gt;tile_y <span class="k3">=</span> <span class="k2">(</span>i <span class="k3">*</span> <span class="k2">(</span>this-&gt;tile_h <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> <span class="k2">(</span>j <span class="k3">*</span> <span class="k2">(</span>this-&gt;tile_h <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> this-&gt;tile_h<span class="k3">/</span><span class="n">2</span><span class="k2">;</span> 
    <span class="k2">}</span>
</pre></div></div><p>
(0; 0) should show (0; 0) for you...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aikei_c)</author>
		<pubDate>Tue, 17 Dec 2013 21:15:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@Edgar, Thank you! Will check it with more time tonight.</p><p>@Aikei_c thanks but it still gives me 7,-7
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Some_Guy)</author>
		<pubDate>Wed, 18 Dec 2013 00:51:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I cleaned it up a bit and changed the dimensions <i>and added in a camera with the arrow buttons</i>.</p><p><s><a href="https://www.allegro.cc/files/attachment/608180">Here&#39;s an updated exe and src</a> (Needs the data and dlls from the earlier attachment)</s></p><p><a href="https://www.allegro.cc/files/attachment/608182">Here&#39;s an updated exe and src</a> (Needs the data and dlls from the earlier attachment)</p><p><span class="remote-thumbnail"><span class="json">{"name":"608181","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/7\/1\/71cf32f7b6d8da2604b3d5371e28862d.png","w":812,"h":632,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/7\/1\/71cf32f7b6d8da2604b3d5371e28862d"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/7/1/71cf32f7b6d8da2604b3d5371e28862d-240.jpg" alt="608181" width="240" height="186" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 18 Dec 2013 06:35:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Edgar, the problem is your code is A5 and mine A4, thank you anyway.</p><p>I give up for now, eventually I will start everything from scratch in A5</p><p>Thanks everyone.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Some_Guy)</author>
		<pubDate>Wed, 18 Dec 2013 14:44:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The logic should still remain the same, doesn&#39;t matter if it&#39;s allegro 4 or 5. Regardless, going with allegro 5 instead of 4 is a good idea.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Wed, 18 Dec 2013 16:39:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The formulas and conversion are the same. I never meant to suggest you had to switch to A5. Don&#39;t you already have something working in A4? Feel free to continue it.</p><p>I really only wrote the demo to demonstrate that my system works.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 18 Dec 2013 23:33:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m afraid you must be trying to just paste our code into your project, while you need to understand what is going on under the hood. Try to understand what people here told you, maybe do some drawings (and calculations) on paper to help you understand what&#39;s going on. That will be so much better than just taking someone else&#39;s code literally and hoping it&#39;s gonna work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aikei_c)</author>
		<pubDate>Thu, 19 Dec 2013 00:23:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613648/994060#target">Aikei_c</a> said:</div><div class="quote"><p>
I&#39;m afraid you must be trying to just paste our code into your project, while you need to understand what is going on under the hood. Try to understand what people here told you, maybe do some drawings (and calculations) on paper to help you understand what&#39;s going on. That will be so much better than just taking someone else&#39;s code literally and hoping it&#39;s gonna work. 
</p></div></div><p>

It&#39;s exactly the other way around, I don&#39;t have any interest on get the code working without understand its  logic.<br />Otherwise I would take Edgar&#39;s code and start my project from there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Some_Guy)</author>
		<pubDate>Thu, 19 Dec 2013 11:23:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>One thing I didn&#39;t say is that you could probably realign 0,0 on the map to be in the top middle. You would have to redo the calculations a bit but then you wouldn&#39;t have to invert the y.</p><p>What part are you having trouble with? Here are the formulas again, for reference. (This is after having aligned with 0,0 on your iso map).</p><p><img class="math" src="http://www.allegro.cc/images/tex/1/1/112219630936998e3fb11760c805c824-96.png" alt="&lt;math&gt;isox = \frac{x}{w} + \frac{y}{h}&lt;/math&gt;" /><br /><img class="math" src="http://www.allegro.cc/images/tex/5/3/5376a10b2fe7c81b5c2efed99f9af3a1-96.png" alt="&lt;math&gt;isoy = \frac{y}{h} - \frac{x}{w}&lt;/math&gt;" /></p><p><img class="math" src="http://www.allegro.cc/images/tex/2/5/259f48c42afc483e3fb947d94b5bc096-96.png" alt="&lt;math&gt;x = \frac{w}{2}*(isox - isoy)&lt;/math&gt;" /><br /><img class="math" src="http://www.allegro.cc/images/tex/4/f/4fcb1284e326e662b0b1f7eb2d3bd6da-96.png" alt="&lt;math&gt;y = \frac{h}{2}*(isox + isoy)&lt;/math&gt;" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 19 Dec 2013 22:10:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Edgar, there is something else besides a map positioning / camera issue.<br />Even when I tried a lot of different approach the isometric numbers never match with the amount of tiles per row/column.<br />Got busy with something else right now, but when I have some time I will start it from scratch in A5, then I will look again at your code and will let you know.</p><p>Thank you.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Some_Guy)</author>
		<pubDate>Fri, 20 Dec 2013 09:05:20 +0000</pubDate>
	</item>
</rss>
