<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Drag and Drop system and TileMap</title>
		<link>http://www.allegro.cc/forums/view/613106</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 14 Aug 2013 05:10:19 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m try to create a TileMap system... for this, I get that sample:</p><p><a href="http://wiki.allegro.cc/index.php?title=Tilemap_Example">http://wiki.allegro.cc/index.php?title=Tilemap_Example</a></p><p>But, that sample is very confusing for me... so, How i can make for the allegro recognize the matrix in screen... for example:</p><p>sample.map</p><p>##############################################<br />##############################################<br />##############################################<br />#########$$###################################<br />##############################################<br />######$$###$$#################################<br />#2############################################<br />$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$</p><p>So, the system to read that file is very very very simple... but, How I can make to game put the correct imagens in correct screen matrix...</p><p>What I have thinked... <br />The game load all the matrix in memory, because, I whant to player walk freely around the map...<br />So, i think for that, I need to create a &quot;camera&quot; system... beacause at time, my player is fixied on the midle of scren... and I whant he can walk  freely on the map...</p><p>&gt;-----------------------------------------&lt;<br />Drag And Drop<br />How I can make a system for drag and drop imagens inside of game ?<br />For example, I have one image loaded in game, and, I need to put that image in correct position of screen, how I can make this ?</p><p>Or, I can make this using the matrix ideia, using the keyboard to put the image in correct local ? <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Alexandre Bencz)</author>
		<pubDate>Mon, 12 Aug 2013 12:01:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;re asking very broad questions that don&#39;t necessarily have a &quot;right&quot; answer. The question isn&#39;t how is it done, it&#39;s how do <b>you</b> want to do it? Personally, I think the easiest way is to use the .map file and iterate through each character and use if-else to find out which object to create.</p><p>So let&#39;s say you load sample.map into a vector&lt;string&gt; where string[0] = first line, string[1] = second line, and so on until you reach eof. You could just go
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//load sample.map into vector&lt;string&gt; map_string;</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">!</span><span class="k3">=</span> map_string.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span><span class="k2">{</span>           <span class="c">//iterate through each string</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">!</span><span class="k3">=</span> map_string<span class="k2">[</span>i<span class="k2">]</span>.length<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>j<span class="k2">)</span><span class="k2">{</span> <span class="c">//iterate through each character</span>
        <span class="c">//Assumes 32x32 tileset</span>
        <span class="k1">int</span> x_loc <span class="k3">=</span> j<span class="k3">*</span><span class="n">32</span><span class="k2">;</span> <span class="c">//x location to create this tile</span>
        <span class="k1">int</span> y_loc <span class="k3">=</span> i<span class="k3">*</span><span class="n">32</span><span class="k2">;</span> <span class="c">//y location to create this tile</span>
        <span class="k1">if</span><span class="k2">(</span> c <span class="k3">=</span><span class="k3">=</span> <span class="s">'#'</span><span class="k2">)</span><span class="k2">{</span> <span class="c">//Probably actually requires doing nothing</span>
            create_tile<span class="k2">(</span> Background_Tile, x_loc, y_loc<span class="k2">)</span><span class="k2">;</span>
        <span class="k2">}</span><span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span> c <span class="k3">=</span><span class="k3">=</span> <span class="s">'$'</span><span class="k2">)</span><span class="k2">{</span>
            create_tile<span class="k2">(</span> Block_Tile, x_loc, y_loc<span class="k2">)</span><span class="k2">;</span>
        <span class="k2">}</span><span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span> c <span class="k3">=</span><span class="k3">=</span> <span class="s">'2'</span><span class="k2">)</span><span class="k2">{</span>
            create_tile<span class="k2">(</span> Character, x_loc, y_loc<span class="k2">)</span><span class="k2">;</span>
        <span class="k2">}</span>
    <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>

If you decide to do a drag and drop thing, it will require you to save the maps to a .map file like that anyway so I&#39;d just stick to doing a tilemap like that for now  <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AmnesiA)</author>
		<pubDate>Mon, 12 Aug 2013 12:58:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>As part of your question you asked how to represent the different images; your map should define this, so instead of:</p><p>#######$#########$##<br />####################<br />#$##################<br />##############$#####</p><p>You would have this:</p><p>1 1 1 1 4 1 1 3 1 1 1<br />1 1 1 1 1 1 3 3 1 1 1<br />1 1 1 1 1 1 1 3 1 1 1<br />1 1 1 1 4 1 1 1 1 1 1</p><p>The in your game loop you would say:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>tileNumber<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> draw_grass<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span>tileNumber<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">3</span><span class="k2">)</span> draw_water<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span>tileNumber<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">4</span><span class="k2">)</span> draw_tree<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

If you want a program to build the maps (drag &amp; drop) look at something like Tilestudio or Mappy.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Mon, 12 Aug 2013 17:07:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The only limit to using numbers to represent tiles is that you have no more than 10 tiles. Comparing single characters works the same way but gives you way more options.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AmnesiA)</author>
		<pubDate>Tue, 13 Aug 2013 00:17:22 +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/613106/988661#target">AmnesiA</a> said:</div><div class="quote"><p> The only limit to using numbers to represent tiles is that you have no more than 10 tiles. Comparing single characters works the same way but gives you way more options.</p></div></div><p>If you leave a space between them, you have as many different tiles as the size of whatever integer type you use to read them in allows.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Tue, 13 Aug 2013 04:24:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OR, you can save your maps as BINARY... write your own editor, which I always do first, they&#39;re not difficult to create, the just write your tile numbers and other level data (level number, name, description, player start x &amp; Y, enemies etc) to it in binary and load it in as binary.</p><p>You&#39;ll much happier once you get an editor created that does things exactly as YOU want them done and end up with a smaller level file as well.</p><p>My little Deluxe Pacman 2 levels I am working on (I posted the editor in another thread) come out at 1.16K each in size.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 13 Aug 2013 04:47:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t know how to use binary files, I&#39;ve been trying to figure it out but I can&#39;t find any resources that make sense to me.</p><p>If you include a delimiter obviously you can make the numbers as big as you want but I don&#39;t see why you&#39;d do that when using a character set you have a uniform width for each object representation and just make it easier to read and write overall.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AmnesiA)</author>
		<pubDate>Tue, 13 Aug 2013 05:48:09 +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/613106/988676#target">AmnesiA</a> said:</div><div class="quote"><p>I don&#39;t know how to use binary files, I&#39;ve been trying to figure it out but I can&#39;t find any resources that make sense to me.</p></div></div><p>I think thats the funny part. I had the same issues.. But on a lower level, binary files are much simpler. Instead of thinking that you&#39;re saving &quot;text&quot; of some kind, you&#39;re storing raw numbers in the file. If you write an 8 bit number, you can read that 8 bit number back. Same goes for 16bit and larger numbers (if you ignore endianess).</p><p>Reading/writing raw data means you also don&#39;t have to parse the file&#39;s contents. Like if you chose to store ascii numbers separated by spaces, you have to specially handle that. With binary, its just one integer after another. very simple.</p><p>append: at a low level, a binary file is just an array of bytes. Or if you wish, any larger multiple of 8bits (so long as you don&#39;t go for a really strange non multiple of 8bits format, that would make things significantly more complicated for no good reason).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 13 Aug 2013 09:42:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Binary file types are fairly easy once you get used to them, but they can be a bit of a pain until you&#39;ve written an editor as they&#39;re not as easy to hand edit as text files.   I usually stick with text files until the program is finished and then convert to a binary format.</p><p>edit:  </p><p>I did start writing a tutorial on using Allegro 4 to read and write multi-platform binary files, but stopped halfway when I decided to switch to A5.  I&#39;m pretty certain I still have the A4.9 code I wrote for the tutorial around somewhere, so maybe I&#39;ll try to update/finish the tutorial.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Tue, 13 Aug 2013 15:07:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have a bit of a predilection for plaintext formats, which I justify like so:</p><p>1) Even with binary save/resource formats, anyone who wants to cheat by editing the files can.<br />2) Unless my software is so unpopular that no one uses it.</p><p>I&#39;d stick with plaintext even for something with an online component - all the popular MMOs have (multiple) communities devoted to extracting and unpacking their datafiles and mining them for interesting information. Security shouldn&#39;t be clientside, and online or offline using binary formats only serves to increase debugging complexity while excluding a portion of my users.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Winfield)</author>
		<pubDate>Tue, 13 Aug 2013 21:32:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s my save and load functions for my Deluxe Pacman 2 level editor (Pace2) which I posted in another thread.  I don&#39;t know if it&#39;s the best way to do it, but it&#39;s the way <b>I</b> do it and it works perfectly for me. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>My <span class="source-code">loadmap<span class="k2">(</span><span class="k2">)</span></span> function uses Allegro 5 functions like <span class="source-code"><a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span><span class="k2">)</span></span> <s>but not my save function for some odd reason, I may simply not have gotten around to it.</s><br />Edit: Just quickly rewrote it to use Allegro 5 functions, don&#39;t know how I missed this the first time around.  See, it pays to help people! <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>As you can see, you simply write your data to the file, then read in back in the same order.  When you write a 2, a 2 goes into the file for example (not a text &quot;2&quot; but an actual number 2, not readable by text editors.  Open up the file in a hex editor and you&#39;ll see a 2 where you wrote a 2 etc... pure binary, no waste of space and no time wasted parsing text.  It is most definitely easier in my opinion.</p><p>I commented the <span class="source-code">loadmap<span class="k2">(</span><span class="k2">)</span></span> function to give an idea what is going on, it&#39;s quite simple as you can see.  No parsing, just load and go.</p><p>This is also all in pure C (I use -std=c11, the 2011 C standard)...</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">// returns true if loaded properly</span>
<span class="number">   2</span><span class="k1">bool</span> loadmap<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, LEVEL <span class="k3">*</span>level<span class="k2">)</span>
<span class="number">   3</span><span class="k2">{</span>
<span class="number">   4</span>   <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>filename <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">   5</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_FILECHOOSER"><span class="a">ALLEGRO_FILECHOOSER</span></a> <span class="k3">*</span>file_dialog <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">   6</span>
<span class="number">   7</span>   <span class="c">// normally we're loading from the data file, switch to normal</span>
<span class="number">   8</span>   <span class="c">// interface so we can load from the disk</span>
<span class="number">   9</span>   <a href="http://www.allegro.cc/manual/al_set_standard_file_interface"><span class="a">al_set_standard_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  10</span>
<span class="number">  11</span>   file_dialog <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_native_file_dialog"><span class="a">al_create_native_file_dialog</span></a><span class="k2">(</span><span class="s">"//."</span>, <span class="s">"Load Level"</span>, <span class="s">"*.dp2"</span>,
<span class="number">  12</span>                 ALLEGRO_FILECHOOSER_FILE_MUST_EXIST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  13</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>file_dialog<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  14</span>      <span class="k1">return</span> <span class="k1">false</span><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="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_show_native_file_dialog"><span class="a">al_show_native_file_dialog</span></a><span class="k2">(</span>display, file_dialog<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  18</span>      <span class="k1">if</span><span class="k2">(</span>file_dialog<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  19</span>         <a href="http://www.allegro.cc/manual/al_destroy_native_file_dialog"><span class="a">al_destroy_native_file_dialog</span></a><span class="k2">(</span>file_dialog<span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</span>      <span class="k2">}</span>
<span class="number">  21</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  22</span>   <span class="k2">}</span>
<span class="number">  23</span>
<span class="number">  24</span>   filename <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_native_file_dialog_path"><span class="a">al_get_native_file_dialog_path</span></a><span class="k2">(</span>file_dialog, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>
<span class="number">  26</span>   <span class="c">// convert to lower case</span>
<span class="number">  27</span>   <span class="k1">char</span> lcname<span class="k2">[</span><span class="n">4096</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number">  28</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><a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  29</span>      lcname<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_826.html" target="_blank">tolower</a><span class="k2">(</span>filename<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>   <span class="k2">}</span>
<span class="number">  31</span>
<span class="number">  32</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span>file <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  33</span>
<span class="number">  34</span>   file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span>lcname, <span class="s">"rb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</span>   <span class="k1">if</span><span class="k2">(</span>file <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  36</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s(%d): Error opening \"%s\" for reading.\n"</span>, __FILE__, __LINE__, filename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  38</span>   <span class="k2">}</span>
<span class="number">  39</span>
<span class="number">  40</span>   <span class="c">// The map id's are all the same to identify this as a Deluxe pacman 2 file</span>
<span class="number">  41</span>   <span class="c">// In this case, it will always be "Pace2"</span>
<span class="number">  42</span>   <a href="http://www.allegro.cc/manual/al_fread"><span class="a">al_fread</span></a><span class="k2">(</span>file, <span class="k3">&amp;</span>level-&gt;map_id, <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">char</span><span class="k2">)</span><span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>MAP_ID<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>   level-&gt;map_ver <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>
<span class="number">  45</span>   <span class="c">// This is the version number of the map, in case it is changed in the</span>
<span class="number">  46</span>   <span class="c">// future, the game checks this.  A conversion program can be created</span>
<span class="number">  47</span>   <span class="c">// to convert levels to a new format by checking this and then converting</span>
<span class="number">  48</span>   <span class="c">// it as needed (I done this with the last game and it paid off).</span>
<span class="number">  49</span>   <span class="k1">if</span><span class="k2">(</span>level-&gt;map_ver <span class="k3">!</span><span class="k3">=</span> MAP_VER <span class="k3">|</span><span class="k3">|</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span>level-&gt;map_id, MAP_ID<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  50</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s(%d): Invalid map type or version.\n"</span>, __FILE__, __LINE__<span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>      <span class="k1">return</span> <span class="k1">false</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="c">// is the level validated (checked for errors by the editor)</span>
<span class="number">  55</span>   <span class="c">// if this is true, than we can play the level now, otherwise</span>
<span class="number">  56</span>   <span class="c">// it can only be loaded and used by the editor until error free (validated)</span>
<span class="number">  57</span>   level-&gt;validated <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>
<span class="number">  59</span>   <span class="c">// Line set we're using</span>
<span class="number">  60</span>   level-&gt;line_set <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  61</span>
<span class="number">  62</span>   <span class="c">// Player starting location (map tile location)</span>
<span class="number">  63</span>   level-&gt;player.x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>   level-&gt;player.y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>
<span class="number">  66</span>   <span class="c">// Four ghost starting locations (each has it's own)</span>
<span class="number">  67</span>   <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">4</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  68</span>      level-&gt;ghost<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>      level-&gt;ghost<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>   <span class="k2">}</span>
<span class="number">  71</span>
<span class="number">  72</span>   <span class="c">// pickup spawn location</span>
<span class="number">  73</span>   level-&gt;pickup.x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>   level-&gt;pickup.y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>
<span class="number">  76</span>   <span class="c">// background tile # to use</span>
<span class="number">  77</span>   level-&gt;background <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>
<span class="number">  79</span>   <span class="c">// read the actual map data here</span>
<span class="number">  80</span>   <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> MAPY<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  81</span>      <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> MAPX<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  82</span>         level-&gt;map<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span>.tile <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>         level-&gt;map<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span>.is_pill <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>         level-&gt;map<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span>.is_powerpill <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>      <span class="k2">}</span>
<span class="number">  86</span>   <span class="k2">}</span>
<span class="number">  87</span>
<span class="number">  88</span>   <span class="c">// Number of pills on this map, used to know when the level is clear</span>
<span class="number">  89</span>   <a href="http://www.allegro.cc/manual/al_fread"><span class="a">al_fread</span></a><span class="k2">(</span>file, <span class="k3">&amp;</span>level-&gt;pills, <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">short</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>
<span class="number">  91</span>   <span class="c">// never forget to close the file</span>
<span class="number">  92</span>   <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span>
<span class="number">  94</span>   <span class="k1">if</span><span class="k2">(</span>file_dialog<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  95</span>      <a href="http://www.allegro.cc/manual/al_destroy_native_file_dialog"><span class="a">al_destroy_native_file_dialog</span></a><span class="k2">(</span>file_dialog<span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>   <span class="k2">}</span>
<span class="number">  97</span>
<span class="number">  98</span>   <span class="c">// Switch back to physfs file we're using</span>
<span class="number">  99</span>   <a href="http://www.allegro.cc/manual/al_set_physfs_file_interface"><span class="a">al_set_physfs_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>
<span class="number"> 101</span>   <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 102</span><span class="k2">}</span>
<span class="number"> 103</span>
<span class="number"> 104</span>
<span class="number"> 105</span>
<span class="number"> 106</span><span class="c">// returns true if saved properly</span>
<span class="number"> 107</span><span class="k1">bool</span> savemap<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, LEVEL <span class="k3">*</span>level<span class="k2">)</span>
<span class="number"> 108</span><span class="k2">{</span>
<span class="number"> 109</span>   <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>filename <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 110</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_FILECHOOSER"><span class="a">ALLEGRO_FILECHOOSER</span></a> <span class="k3">*</span>file_dialog <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 111</span>
<span class="number"> 112</span>   <a href="http://www.allegro.cc/manual/al_set_standard_file_interface"><span class="a">al_set_standard_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>
<span class="number"> 114</span>   <span class="c">/// TODO: Search folder for levels and set the filename to the next available level #</span>
<span class="number"> 115</span>   file_dialog <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_native_file_dialog"><span class="a">al_create_native_file_dialog</span></a><span class="k2">(</span><span class="s">".//"</span>, <span class="s">"Save Level"</span>, <span class="s">"*.dp2"</span>,
<span class="number"> 116</span>                 ALLEGRO_FILECHOOSER_SAVE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>file_dialog<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 118</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 119</span>   <span class="k2">}</span>
<span class="number"> 120</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_show_native_file_dialog"><span class="a">al_show_native_file_dialog</span></a><span class="k2">(</span>display, file_dialog<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>file_dialog<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 123</span>         <a href="http://www.allegro.cc/manual/al_destroy_native_file_dialog"><span class="a">al_destroy_native_file_dialog</span></a><span class="k2">(</span>file_dialog<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>      <span class="k2">}</span>
<span class="number"> 125</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 126</span>   <span class="k2">}</span>
<span class="number"> 127</span>
<span class="number"> 128</span>   filename <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_native_file_dialog_path"><span class="a">al_get_native_file_dialog_path</span></a><span class="k2">(</span>file_dialog, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</span>
<span class="number"> 130</span>   <span class="c">// convert to lower case</span>
<span class="number"> 131</span>   <span class="k1">char</span> lcname<span class="k2">[</span><span class="n">4096</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 132</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> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 133</span>      lcname<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_826.html" target="_blank">tolower</a><span class="k2">(</span>filename<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>   <span class="k2">}</span>
<span class="number"> 135</span>
<span class="number"> 136</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span>file <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 137</span>
<span class="number"> 138</span>   file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span>lcname, <span class="s">"wb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>   <span class="k1">if</span><span class="k2">(</span>file <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 140</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s(%d): Error opening \"%s\" for writing.\n"</span>, __FILE__, __LINE__, lcname<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 142</span>   <span class="k2">}</span>
<span class="number"> 143</span>
<span class="number"> 144</span>   <a href="http://www.allegro.cc/manual/al_fwrite"><span class="a">al_fwrite</span></a><span class="k2">(</span>file, level-&gt;map_id, <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>level-&gt;map_id<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/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;map_ver<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 147</span>   <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;validated<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>   <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;line_set<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</span>   <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;player.x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 150</span>   <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;player.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>   <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">4</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 152</span>      <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;ghost<span class="k2">[</span>i<span class="k2">]</span>.x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>      <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;ghost<span class="k2">[</span>i<span class="k2">]</span>.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>   <span class="k2">}</span>
<span class="number"> 155</span>   <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;pickup.x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>   <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;pickup.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>   <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;background<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 158</span>   <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> MAPY<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 159</span>      <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> MAPX<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 160</span>         <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;map<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span>.tile<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>         <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;map<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span>.is_pill<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span>         <a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file, level-&gt;map<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span>.is_powerpill<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 163</span>      <span class="k2">}</span>
<span class="number"> 164</span>   <span class="k2">}</span>
<span class="number"> 165</span>   <a href="http://www.allegro.cc/manual/al_fwrite"><span class="a">al_fwrite</span></a><span class="k2">(</span>file, <span class="k3">&amp;</span>level-&gt;pills, <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">short</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>
<span class="number"> 167</span>   <span class="c">// never forget to close the file</span>
<span class="number"> 168</span>   <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>
<span class="number"> 170</span>   <span class="k1">if</span><span class="k2">(</span>file_dialog<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 171</span>      <a href="http://www.allegro.cc/manual/al_destroy_native_file_dialog"><span class="a">al_destroy_native_file_dialog</span></a><span class="k2">(</span>file_dialog<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 172</span>   <span class="k2">}</span>
<span class="number"> 173</span>
<span class="number"> 174</span>   <a href="http://www.allegro.cc/manual/al_set_physfs_file_interface"><span class="a">al_set_physfs_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span>
<span class="number"> 176</span>   <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 177</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Wed, 14 Aug 2013 05:10:19 +0000</pubDate>
	</item>
</rss>
