<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Allegro and custom configuration and startup</title>
		<link>http://www.allegro.cc/forums/view/554793</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 22 Dec 2005 16:03:22 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just finished the second part to my AXL project (see sig for link, or <a href="http://retrospec.sgn.net/game-links.php?link=axl">http://retrospec.sgn.net/game-links.php?link=axl</a>).</p><p>This one is quite simple and small, it takes an XML file (or just a parameter if you can&#39;t be arsed with xml, though that isn&#39;t the point) and stores all the stuff you&#39;d need in allegro, like colour depth, window mode, fps, which basic modules you need running and allows you to easily load/save/modify them and it also starts up allegro in a graphical mode for you using the XML values (if you want as you might just want to use them without using the startup method). The startup method does all the stuff you usually can&#39;t be bothered to do like going through a whole series of permutations of modes you allow if the main mode fails (e.g. fullscreen//windowed/32bit/16bit) it goes through it&#39;s list you&#39;ve said is ok and gets one. You can also add/remove/read custom config values. All entries auto save so there isn&#39;t anything needed once you make changes, e.g. the following code sets up windows using the XML file, reads some custom settings, writes back existing and new entries and saves the XML again.</p><div class="source-code snippet"><div class="inner"><pre>Configuration<span class="k3">*</span> myConfig<span class="k3">=</span><span class="k1">new</span> Configuration<span class="k2">(</span><span class="s">"config.xml"</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//load up and set everything</span>
<span class="k1">int</span> ret<span class="k3">=</span>myConfig-&gt;AllegroStart<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//start allegro if we wish</span>

<span class="c">//get set existing and new. can be int, float, string</span>
string name<span class="k3">=</span>myConfig-&gt;GetCustom<span class="k2">(</span><span class="s">"author"</span>,<span class="s">"not set"</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">int</span> lives<span class="k3">=</span>myConfig-&gt;GetCustom<span class="k2">(</span><span class="s">"lives"</span>,<span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
myConfig-&gt;SetCustom<span class="k2">(</span><span class="s">"lives"</span>,<span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
myConfig-&gt;SetCustom<span class="k2">(</span><span class="s">"newentry"</span>,<span class="n">34</span>.<span class="n">456</span><span class="k2">)</span><span class="k2">;</span>
myConfig-&gt;CapsSystem-&gt;Depth<span class="k3">=</span><span class="n">24</span><span class="k2">;</span>
myConfig-&gt;CapsGraphics.WindowMode<span class="k3">=</span><span class="s">"fullscreen"</span><span class="k2">;</span>

<span class="k1">delete</span> myConfig<span class="k2">;</span>
</pre></div></div><p>

That&#39;s about it to start up allegro using external configurations, reading and setting new custom stuff and when you delete the object at the bottom it automatically saves everything. The XML is something like:</p><div class="source-code snippet"><div class="inner"><pre><span class="k3">&lt;</span>?xml version<span class="k3">=</span><span class="s">"1.0"</span> encoding<span class="k3">=</span><span class="s">"UTF-8"</span> ?<span class="k3">&gt;</span>
<span class="k3">&lt;</span>config&gt;
    <span class="k3">&lt;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_802.html" target="_blank">system</a> fps<span class="k3">=</span><span class="s">"60"</span> debugon<span class="k3">=</span><span class="s">"1"</span> autowritemain<span class="k3">=</span><span class="s">"1"</span> autowritecustom<span class="k3">=</span><span class="s">"1"</span>
        enablejoystick<span class="k3">=</span><span class="s">"0"</span> enablekeyboard<span class="k3">=</span><span class="s">"1"</span> enablemouse<span class="k3">=</span><span class="s">"1"</span> enablesound<span class="k3">=</span><span class="s">"1"</span> enablemidi<span class="k3">=</span><span class="s">"1"</span>
    <span class="k3">/</span><span class="k3">&gt;</span>
    <span class="k3">&lt;</span>graphics <a href="http://www.allegro.cc/manual/vsync" target="_blank"><span class="a">vsync</span></a><span class="k3">=</span><span class="s">"0"</span> graphicsmode<span class="k3">=</span><span class="s">"1"</span> depthpreferred<span class="k3">=</span><span class="s">"32"</span> depthfallback<span class="k3">=</span><span class="s">"16"</span> <span class="k3">/</span><span class="k3">&gt;</span>
    <span class="k3">&lt;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> width<span class="k3">=</span><span class="s">"640"</span> height<span class="k3">=</span><span class="s">"480"</span> autodetect<span class="k3">=</span><span class="s">"windowed"</span> <span class="k3">/</span><span class="k3">&gt;</span>
    <span class="k3">&lt;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a> maxvoicearray<span class="k3">=</span><span class="s">"32"</span> samplevolume<span class="k3">=</span><span class="s">"150"</span> musicvolume<span class="k3">=</span><span class="s">"128"</span> <span class="k3">/</span><span class="k3">&gt;</span>
    <span class="k3">&lt;</span>custom name<span class="k3">=</span><span class="s">"author"</span> valuestring<span class="k3">=</span><span class="s">"Neil"</span> <span class="k3">/</span><span class="k3">&gt;</span>
    <span class="k3">&lt;</span>custom name<span class="k3">=</span><span class="s">"badger"</span> valuestring<span class="k3">=</span><span class="s">"badger badger badger"</span> <span class="k3">/</span><span class="k3">&gt;</span>
    <span class="k3">&lt;</span>custom name<span class="k3">=</span><span class="s">"game"</span> valuestring<span class="k3">=</span><span class="s">"turnips from space"</span> <span class="k3">/</span><span class="k3">&gt;</span>
    <span class="k3">&lt;</span>custom name<span class="k3">=</span><span class="s">"score"</span> valueint<span class="k3">=</span><span class="s">"3"</span> <span class="k3">/</span><span class="k3">&gt;</span>
    <span class="k3">&lt;</span>custom name<span class="k3">=</span><span class="s">"gravity"</span> valuefloat<span class="k3">=</span><span class="s">"-9.8"</span> <span class="k3">/</span><span class="k3">&gt;</span>
<span class="k3">&lt;</span><span class="k3">/</span>config&gt;
</pre></div></div><p>

The config stuff is in the Config directory and is detailed in the updated instructions.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Thu, 22 Dec 2005 16:03:22 +0000</pubDate>
	</item>
</rss>
