<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>&quot;.dat&quot; files? what, who, were and why?</title>
		<link>http://www.allegro.cc/forums/view/562611</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 01 Feb 2006 03:06:41 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve recently started whith C++ (and with programming, come to that) and everyday I find surprises, today, the winner is the &quot;.dat&quot; file. While cheking out the code to make a RPG&#39;s map I come to find that all the images and data concerning them are in  a misterious file, sealed off from mortal eyes, called &quot;data.dat&quot;.</p><p>So, what exactly is a .dat file? what does it do, how does it work, and how can I open and edit it? Plese escuse my incredibly basic question but as ignorance ain&#39;t a crime (yet) I think I&#39;ll  do my best to put a remedy to it, if any of you can help me out, I&#39;d be realy thankfull cause its really frustrating to go trught the page of code labeled map.cpp only to find lonelly drawing functions there (which come to it I still don&#39;t fully understand xD)</p><p>Cheers and thanks! <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jaime barrachina)</author>
		<pubDate>Sun, 29 Jan 2006 05:21:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;re talking about Allegro?  If you&#39;ve downloaded &amp; installed it, check out the manuals in /allegro/docs/html or /allegro/docs/text etc.  In the tools section there&#39;s a &quot;grabber.exe&quot; program that&#39;ll show you what&#39;s in the .dat files &amp; import/export bitmaps, wave files, etc.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Sun, 29 Jan 2006 05:25:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It is basically a compressed file, like a tar.gz or a .zip. You can either load it all in memory, or load just chuncks as you need them. Check grabber.txt and datafile.txt somewhere in Allegro source to learn more about the technical details.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Sun, 29 Jan 2006 05:28:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oks thanks people <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /><br />(wow that was quick, 5 minutes since i posted O.O )
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jaime barrachina)</author>
		<pubDate>Sun, 29 Jan 2006 05:37:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Like others have said, the .dat files are generally produced by grabber (in Allegro programs, anyways). This isn&#39;t always the case, though. the .dat extension could be used for virtually anything. Someone might want to serialize their classes out into a random-access .dat file (in short - a simple database), which is much different than a compressed file that could contain several medias.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Sun, 29 Jan 2006 13:35:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The Allegro dat files don&#39;t have to be compressed. If they aren&#39;t, they are there only to keep everything in as few file as possible. You could have your 100 sprites in 100 bmp files or in one dat file.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Sun, 29 Jan 2006 15:48:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Mmm, ive managed to open the file whith the grabber and it shows a kind of bunched up images compresed into a single drawing, pieces and bits of trees, fences, grass, ect. I supose the program somehow cuts the picture like if it were on a grid, how does it do that? Anyone could post a simple example of the code needed to slice my rectangular pizza? Txs a bunch people, i dont know wht i&#39;d do whithout this forum (Rott in some forgoten room, surrounded by empty coke cans and pizza boxes i supose)</p><p>Cheers!!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jaime barrachina)</author>
		<pubDate>Sun, 29 Jan 2006 17:11:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s called a tileset. It&#39;s a single big image that holds many different tiles and/or sprites used for a specific area of a game. Typically, each tile/sprite is a fixed size (16x16 or 32x32 usually), so you just need to use <span class="source-code"><a href="http://www.allegro.cc/manual/create_sub_bitmap" target="_blank"><span class="a">create_sub_bitmap</span></a></span> at 16 or 32 pixel intervals to grab each one.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Sun, 29 Jan 2006 17:31:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
i dont know wht i&#39;d do whithout this forum
</p></div></div><p>
You would be having a life. Like we would.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Mon, 30 Jan 2006 03:03:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Johan Halmén said:</div><div class="quote"><p>
You would be having a life. Like we would.
</p></div></div><p>
And still you let your children in here? <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Mon, 30 Jan 2006 03:20:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p> I supose xDDD
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jaime barrachina)</author>
		<pubDate>Mon, 30 Jan 2006 04:11:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The following is an assumption:</p><p>You are looking at my datafile that I created. The bitmap itself is a complete set of tiles. There are simple ways of accessing which tile I need at any point. The bitmap is arranged as 256x1024 or 8x32 of 32x32 pixel tiles.</p><div class="source-code snippet"><div class="inner"><pre>
<span class="p">#define TILESIZE        32</span>
<span class="p">#define SHIFT           5 // 2^SHIFT = TILESIZE</span>
<span class="p">#define TILE_SET_WIDTH  8</span>


<span class="k1">void</span> draw_tile<span class="k2">(</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>tiles, <span class="k1">int</span> p, <span class="k1">int</span> x, <span class="k1">int</span> y <span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">int</span> tx <span class="k3">=</span> <span class="k2">(</span> p % TILE_SET_WIDTH <span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> SHIFT<span class="k2">;</span>
    <span class="k1">int</span> ty <span class="k3">=</span> <span class="k2">(</span> p <span class="k3">/</span> TILE_SET_WIDTH <span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> SHIFT<span class="k2">;</span>

    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span> tiles, buffer, tx, ty, x, y, TILESIZE, TILESIZE <span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Let&#39;s say that you want to draw the tile at 2 rows down and 4 from left at screen position 128x128. That would be tile ( 2 * TILE_SET_WIDTH ) + 4 = 20;</p><div class="source-code snippet"><div class="inner"><pre>draw_tile<span class="k2">(</span> buffer, <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span><span class="k2">)</span>datafile<span class="k2">[</span> BMP_TILES <span class="k2">]</span>.dat, <span class="n">20</span>, <span class="n">128</span>, <span class="n">128</span> <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

20 is broken down in the function as
</p><div class="source-code snippet"><div class="inner"><pre>tx <span class="k3">=</span> <span class="k2">(</span> <span class="n">20</span> % <span class="n">8</span> <span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">5</span> <span class="k3">=</span> <span class="n">128</span>
ty <span class="k3">=</span> <span class="k2">(</span> <span class="n">20</span> <span class="k3">/</span> <span class="n">8</span> <span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">5</span> <span class="k3">=</span> <span class="n">64</span>
</pre></div></div><p>
So the section of the bitmap with be drawn like:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span> tiles, buffer, <span class="n">128</span>, <span class="n">64</span>, <span class="n">128</span>, <span class="n">128</span>, <span class="n">32</span>, <span class="n">32</span> <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>



Or for a grid</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#define SCREEN_GRID_WIDTH  20</span></td></tr><tr><td class="number">2</td><td><span class="p">#define SCREEN_GRID_HEIGHT 15</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">void</span> draw_map<span class="k2">(</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer <span class="k2">)</span></td></tr><tr><td class="number">5</td><td><span class="k2">{</span></td></tr><tr><td class="number">6</td><td>    <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> SCREEN_GRID_HEIGHT<span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span></td></tr><tr><td class="number">7</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">8</td><td>        <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> SCREEN_GRID_WIDTH<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span></td></tr><tr><td class="number">9</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>            <span class="k1">int</span> p <span class="k3">=</span> get_from_map<span class="k2">(</span> i, j <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>            draw_tile<span class="k2">(</span> buffer, <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span><span class="k2">)</span>datafile<span class="k2">[</span> BMP_TILES <span class="k2">]</span>.dat, p, i <span class="k3">&lt;</span><span class="k3">&lt;</span> SHIFT, j <span class="k3">&lt;</span><span class="k3">&lt;</span> SHIFT <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">14</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">15</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

POINT</p><p>If you need to do special things to the tiles such as transparency, translucency, etc. This will not be possible. You would then need to separate the entire tile bitmap into 256 bitmaps. This can be done easily enough in the grabber program. </p><p>1. Read in a bitmap <br />2. Grab from Grid<br />3. Set the tile size you need<br />4. Enter the name such as TILES</p><p>You will end up with 256 tiles named TILES000 to TILES255</p><p>Or you could do it yourself in a function
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>tiles<span class="k2">[</span> <span class="n">256</span> <span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">int</span> tilefy<span class="k2">(</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bitmap <span class="k2">)</span></td></tr><tr><td class="number">4</td><td><span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    <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">256</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span></td></tr><tr><td class="number">6</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">7</td><td>        <span class="k1">if</span> <span class="k2">(</span> tiles<span class="k2">[</span> i <span class="k2">]</span> <span class="k2">)</span></td></tr><tr><td class="number">8</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>            <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span> tiles<span class="k2">[</span> i <span class="k2">]</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>            tiles<span class="k2">[</span> i <span class="k2">]</span> <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td>        tiles<span class="k2">[</span> i <span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span> TILESIZE, TILESIZE <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        <span class="k1">if</span> <span class="k2">(</span> <span class="k3">!</span>tiles<span class="k2">[</span> i <span class="k2">]</span> <span class="k2">)</span></td></tr><tr><td class="number">15</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">16</td><td>            <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>        <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span> bitmap, tiles<span class="k2">[</span> i <span class="k2">]</span>, <span class="k2">(</span> i % TILE_SET_WIDTH <span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> SHIFT, <span class="k2">(</span> i <span class="k3">/</span> TILE_SET_WIDTH <span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> SHIFT, <span class="n">0</span>, <span class="n">0</span>, TILESIZE, TILESIZE <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Mon, 30 Jan 2006 10:16:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>TXS for all the replies!! I&#39;ll try and see if anithing comes out xD<br />Cheers and txs again!!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jaime barrachina)</author>
		<pubDate>Wed, 01 Feb 2006 03:06:41 +0000</pubDate>
	</item>
</rss>
