<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tom J Nowell</title>
	<atom:link href="http://darkstars.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://darkstars.co.uk</link>
	<description></description>
	<lastBuildDate>Thu, 07 Mar 2013 10:18:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>ClosestBuildSite &amp; Shard</title>
		<link>http://darkstars.co.uk/2013/closestbuildsite-shard/</link>
		<comments>http://darkstars.co.uk/2013/closestbuildsite-shard/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 10:09:40 +0000</pubDate>
		<dc:creator>Tom Nowell</dc:creator>
				<category><![CDATA[Shard]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[building placement]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[spring engine]]></category>

		<guid isPermaLink="false">http://darkstars.co.uk/?p=1730</guid>
		<description><![CDATA[Since the beginning, the Spring engine APIs have provided a helper function closestbuildsite. Poorly documented, this API call does not work as one would expect, and is understood by few ( hence the lack of documentation ). For lack of time to implement something more comprehensive, Shard uses this API. Because of the way this [...]]]></description>
				<content:encoded><![CDATA[<p>Since the beginning, the Spring engine APIs have provided a helper function closestbuildsite. Poorly documented, this API call does not work as one would expect, and is understood by few ( hence the lack of documentation ).</p>
<p>For lack of time to implement something more comprehensive, Shard uses this API.</p>
<p>Because of the way this API works, these issues can appear, sometimes all at once:</p>
<ul>
<li><span style="line-height: 13px;">Units are spaced apart by large distances</span></li>
<li>Maps are built in such a way that those large distances prevent a position being found in the search radius</li>
<li>Wide open plains are ignored because they aren&#8217;t inside the search radius</li>
<li>A builder in the middle of an island might not have any valid water in its radius when requesting a shipyard</li>
<li>Units are built too close to each other</li>
</ul>
<p>These are symptomatic of how the API works.</p>
<p>Closestbuildsite requires a position, a radius, a unit definition, a facing direction and a spacing parameter, but has the following problems:</p>
<ul>
<li><span style="line-height: 13px;">If you pass the builders position, you will likely get the builders position back, and the builder will block itself, preventing construction</span></li>
<li>As the search radius goes up, the cost and performance degradation rises exponentially, it performs no caching, and employs no special mechanisms to optimise</li>
<li>The spacing parameter is counter intuitive. The unit of measurement is how footprints worth of the specified unit</li>
<li>Spacing doesn&#8217;t take account of terrain or units, anything that blocks counts, so if there&#8217;s a buildable area with a small bump in the middle, it will not be valid.</li>
</ul>
<p>So if we specify a spacing value of 5, and build a light laser tower with a footprint of 1, it must be 5 from the nearest unbuildable square. If we build a kbot factory with a footprint of 8, and a spacing of 5, it must be 40 squares away from any unbuildable blocked position.</p>
<p>Shard attempts to mitigate this by doing some math on the footprint values and giving different values as spacing depending on how big or small a footprint is, but they&#8217;re approximate, and hard to optimise. Failures are inevitable. You can use the API to pass in your own position, but few do, and it moves the optimisation of spacing issue to lua rather than the C++ component.</p>
<h2>So What&#8217;s The Longterm fix?</h2>
<p>Implement a building placement algorithm. Possible mechanisms include:</p>
<ul>
<li><span style="line-height: 13px;">Brute force test each square, starting at a position and radiating outwards ( expensive )</span></li>
<li>Split the map up into a grid, and mark larger grid squares as free or not free, with data on wether they&#8217;re valid for unit types. Generate valid positions ahead of time</li>
</ul>
<p>I will likely take the latter approach, and I&#8217;m sure there are other routes, but those are simple and easy to implement, and importantly, to expand on for each games purposes. In the future it also leads to basic landmass detection using a basic flood algorithm, to help prevent things such as shipyards in ponds, land factories on islands, and other silly construction decisions.</p>
<p>It could also be a good idea to delete the method from the API. This may break some old AIs, but most encountered this issue and built their own algorithm. Doing this would prevent new developers falling into the same trap and force new algorithms to be built ( and more clever AI features )</p>
<p>- Lead image source: http://www.flickr.com/photos/metrolibraryarchive/4128220971/sizes/o/</p>
]]></content:encoded>
			<wfw:commentRss>http://darkstars.co.uk/2013/closestbuildsite-shard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring Server Move</title>
		<link>http://darkstars.co.uk/2011/spring-server-move/</link>
		<comments>http://darkstars.co.uk/2011/spring-server-move/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 15:57:15 +0000</pubDate>
		<dc:creator>Tom Nowell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://darkstars.co.uk/?p=1673</guid>
		<description><![CDATA[Licho, having tired of his internet fridge, has moved to a more powerful machine. It appears the spring community is now hosted on a very expensive customised espresso machine: Asked about the new machines specification, the owner, Licho had this to say: 15:36:39] &#60;Licho[0K]&#62; yeah something like that .. its 24gb server in roubaix france [...]]]></description>
				<content:encoded><![CDATA[<p>Licho, having tired of his <a href="http://darkstars.co.uk/2009/lichos-new-fridge/" target="_blank">internet fridge</a>, has moved to a more powerful machine.</p>
<p><span id="more-1673"></span>It appears the spring community is now hosted on a very expensive customised espresso machine:</p>
<p><a href="http://www.amazon.co.uk/gp/product/B0041DIWZM/ref=s9_simh_gw_p79_d0_g79_i1?pf_rd_m=A3P5ROKL5A1OLE&amp;pf_rd_s=center-2&amp;pf_rd_r=0X9P2KCYNEGR8SE2VTQK&amp;pf_rd_t=101&amp;pf_rd_p=467128533&amp;pf_rd_i=468294" target="_blank"><img class="alignnone size-full wp-image-1675" title="31sddNtu01L._SL500_AA300_" src="http://darkstars.co.uk/wp-content/uploads/2011/11/31sddNtu01L._SL500_AA300_.jpg" alt="" width="300" height="300" /></a></p>
<p>Asked about the new machines specification, the owner, Licho had this to say:</p>
<pre>15:36:39] &lt;Licho[0K]&gt; yeah something like that .. its 24gb server in roubaix france ..
[15:37:09] &lt;AF&gt; is it noisy when it's at work?
[15:37:31] &lt;Licho[0K]&gt; most likely yeah, it has ordinary disk and fans
[15:37:47] &lt;AF&gt; aha a custom build ^_^</pre>
<p>Previous servers include <a href="http://darkstars.co.uk/2008/fnordias-new-tv/" target="_blank">Fnordias much lauded media TV</a>, and its replacement, the infamous <a href="http://darkstars.co.uk/2009/lichos-new-fridge/" target="_blank">internet enabled fridge</a>. We asked numerous community members their opinion on the output of the new espresso machine:</p>
<pre>[15:54:34] &lt;[LCC]KingRaptor[0K]&gt; things seem a bit smoother (may be placebo-like effect)</pre>
<p>Rival bidder for the new machine tender  Paro Robots U.S. Inc. is said to be angry at the revelation.  Paro Robots had proposed the <a href="http://www.youtube.com/watch?v=VEWTSSwwp5U" target="_blank">internet enabled cuddly seal</a>:</p>
<p><a href="http://darkstars.co.uk/wp-content/uploads/2011/11/clickchick_2.jpg"><img class="aligncenter size-full wp-image-1679" title="clickchick_2" src="http://darkstars.co.uk/wp-content/uploads/2011/11/clickchick_2.jpg" alt="" width="300" height="200" /></a></p>
<p>Upon light of the rejection, rumours of an impending army of angry Japanese investors displaced rumours of the impending army of Atari litigators. The community is expected to return to Atari fear-mongering in the near future.</p>
]]></content:encoded>
			<wfw:commentRss>http://darkstars.co.uk/2011/spring-server-move/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shard, Gadget AIs, and Project Management</title>
		<link>http://darkstars.co.uk/2011/shard-gadget-ais-and-project-management/</link>
		<comments>http://darkstars.co.uk/2011/shard-gadget-ais-and-project-management/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 15:06:23 +0000</pubDate>
		<dc:creator>Tom Nowell</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Shard]]></category>

		<guid isPermaLink="false">http://darkstars.co.uk/?p=1654</guid>
		<description><![CDATA[Things are moving forward. Recent political hoohahs and misunderstandings have been cleared up, and a new vision is needed! To start, Foreboding Angel has offered to lead a port of Shard to exist as a pure lua AI in the spring engine, using the native gadget AI APIs. How will the different projects move forward? [...]]]></description>
				<content:encoded><![CDATA[<p>Things are moving forward. Recent political hoohahs and misunderstandings have been cleared up, and a new vision is needed!<span id="more-1654"></span></p>
<p>To start, Foreboding Angel has offered to lead a port of Shard to exist as a pure lua AI in the spring engine, using the native gadget AI APIs.</p>
<h3>How will the different projects move forward?</h3>
<p>I will continue to develop Shard as &#8216;Shard Core&#8217;, using the native interface. Foreboding Angel will lead the maintenance of the Gagdte Port of the Shard API. The Shard code from SHard core will use this API, and only this API, to ensure compatability.</p>
<h4>Naming</h4>
<p>My build will be termed Shard Core, and I suggest the following naming scheme:</p>
<pre>&lt;game name or distribution name&gt; Shard &lt;version moniker&gt;</pre>
<p>e.g. EvoRTS Shard Ballsey or just EvoRTS Shard if we were to take the latest release ( 0.31 Ballsey ) and the gadget AI currently used in EvolutionRTS.</p>
<h3>What is Needed to Port the API?</h3>
<p>Shards C++ component exposes an object called <em>game_engine</em> which is wrapped by another object named <em>game</em> in the file api.lua. Using this, one can make this objects functions work in both environments.</p>
<p>E.g. to make the game:SendToConsole call work in both Spring and Shards lua environments, the following ammendments need to be made:</p>
<pre>   -- prints 'message' to ingame chat console
   function game:SendToConsole(message)
      <strong>if Spring ~= nil then</strong>
<strong>         return Spring.SendMessage(message)</strong>
<strong>      else</strong>
         return game_engine:SendToConsole(message)
      <strong>end</strong>
   end</pre>
<p>From here on it&#8217;s mainly a matter of including the new api.lua, the ai itself, instantiating an instance of the AI from a gadget luaAI, and then passing events to this new AI object. Wrapper wills also need ot be made to prepresent the unit objects and unit definition objects also, but these are simple and would require little work, and can be done entirely using spring gadget API calls.</p>
<h3>Spring specific code?</h3>
<p>Once Shard is ported, developers will want to use their own code callouts and access spring specific APIs. I ask that rather than modify the existing code, they duplicate the relevant behaviours under a new game specific name, and make their own adjustments there. This way they can retain the benefits of updated Shard code, while having their own code that integrates with their own gadgets. Further documentation and helper methods will be made available to facilitate this, allowing Shard behaviours to be added from other spring gadgets.</p>
<h3>Progress</h3>
<p>Foreboding is currently refamiliarising himself with Shards internals. Here&#8217;s a video of a recent battle he posted:</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/MCeJeCuM4N8?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://darkstars.co.uk/2011/shard-gadget-ais-and-project-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shard 0.31.1 Not So Ballsey</title>
		<link>http://darkstars.co.uk/2011/shard-0-31-1-not-so-ballsey/</link>
		<comments>http://darkstars.co.uk/2011/shard-0-31-1-not-so-ballsey/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 16:25:55 +0000</pubDate>
		<dc:creator>Tom Nowell</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Shard]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[shard ai]]></category>

		<guid isPermaLink="false">http://darkstars.co.uk/?p=1657</guid>
		<description><![CDATA[A minor adjustment for the current spring release when encountering unknown games. It has been found that there was a typographical error ( a missing &#8216;=&#8217; ). Fixed in the development build it has gone unfixed in the latest release, but not any more. Download Shard 0.31.1 Not So Ballsey here]]></description>
				<content:encoded><![CDATA[<p>A minor adjustment for the current spring release when encountering unknown games.</p>
<p><span id="more-1657"></span>It has been found that there was a typographical error ( a missing &#8216;=&#8217; ). Fixed in the development build it has gone unfixed in the latest release, but not any more.</p>
<p><a href="http://www.darkstars.co.uk/downloads/view.php?file=releases/shard/Shard.0.31.1NotSoBallsey.rar">Download Shard 0.31.1 Not So Ballsey here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://darkstars.co.uk/2011/shard-0-31-1-not-so-ballsey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shard Attacks</title>
		<link>http://darkstars.co.uk/2011/shard-attacks/</link>
		<comments>http://darkstars.co.uk/2011/shard-attacks/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 20:33:16 +0000</pubDate>
		<dc:creator>Tom Nowell</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Shard]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[shard ai]]></category>

		<guid isPermaLink="false">http://darkstars.co.uk/?p=1632</guid>
		<description><![CDATA[I was asked a question about Shards attack system on the spring engine lobby server. Having described Shards attack system, I decided to repost the log here for posterity [20:19:31] &#60;[Mr]Peanus_Butter&#62; yo its #fhh£hu@4545, just a few questions about shard if you've a moment [20:19:41] oh rly? [20:20:10] &#60;[Mr]Peanus_Butter&#62; i'm wondering how shard determines threats [...]]]></description>
				<content:encoded><![CDATA[<p>I was asked a question about Shards attack system on the spring engine lobby server. Having described Shards attack system, I decided to repost the log here for posterity<span id="more-1632"></span></p>
<pre>[20:19:31] &lt;[Mr]Peanus_Butter&gt; yo its <del>#fhh£hu@4545</del>, just a few questions about shard if you've a moment
[20:19:41]  oh rly?
[20:20:10] &lt;[Mr]Peanus_Butter&gt; i'm wondering how shard determines threats or enemy positions... how does it choose how to attack basically
[20:20:27] &lt;[Mr]Peanus_Butter&gt; i know it waits until a certain number of units are massed
[20:20:33] &lt;[Mr]Peanus_Butter&gt; but how does it decide where to go?
[20:20:37]  the files in question are attackhandler.lua and attackerbehaviour.lua
[20:20:46] &lt;[Mr]Peanus_Butter&gt; just a sec, i make open
[20:20:55]  when the unit is built
[20:21:07]  behaviourfactory looks at the behaviours table and loads the ones specified
[20:21:13]  if no entry is found
[20:21:25]  it looks to see if the unit is in the attackerslist table
[20:21:32]  and adds the attackerbehaviour
[20:21:45]  the attackerbehaviour then acts kind of like a conscripted soldier at home
[20:21:58]  it fires off an event registering its presence to the attackhandler
[20:22:09]  attackhandler then saves it in a table and does a check
[20:22:23]  if the queue of waiting attackers in the list is above a threshold
[20:22:28]  it removes them from the queue
[20:22:36]  and starts looking for a target
[20:22:48]  it iterates through every enemy on the map
[20:22:55] &lt;[Mr]Peanus_Butter&gt; ok i'm going to need a DL link, apparently i havent got it on this computer
[20:22:59]  adding its position to a counter on a grid
[20:23:08] &lt;[Mr]Peanus_Butter&gt; (still listening, thx for this)
[20:23:23]  when all the units are categorised, it picks the grid sector with the lowest nonzero value
[20:23:45]  this is how AAI, and NTai chose their targets
[20:23:53]  only AAI and NTai chose the highest
[20:23:56]  not the lowest
[20:24:02]  NTai had a lot of other twists also
[20:24:04] &lt;[Mr]Peanus_Butter&gt; so the choice of area to send attackers to is -not- actually using a threatmap, but a similar behavior, looking for a weak point
[20:24:24]  those 2 AIs did the targeting loop every few frames and added it to a heatmap that decayed
[20:24:34]  its more instantaneous and reactive
[20:24:37]  no lingering threats
[20:24:45]  rather simple if I do say so
[20:24:53]  when an enemy target is found
[20:25:01] &lt;[Mr]Peanus_Butter&gt; hmmmm
[20:25:04]  the attackhandler orders the attackerbehaviour to attack
[20:25:13]  a fight command is sent to the position
[20:25:20]  and the attacker is now left ot its own devices
[20:25:27]  and si out of the loop
[20:25:43]  when the attackerbehaviour recieves a unitIdle event for the attacker
[20:25:52]  the assumption is that there is nothing for it to do
[20:26:01]  so it assigns the attacker as in waiting
[20:26:08]  and repeats the whole process from the beginning
[20:26:23] &lt;[Mr]Peanus_Butter&gt; well it sounds pretty efficient
[20:26:23]  a nice and simple 'new' unit goes in
[20:26:26]  attacker comes out
[20:26:53] &lt;[Mr]Peanus_Butter&gt; attacking a weakpoint seems like a better strategy than attacking the strongest point
[20:26:58]  I have further optimisations to make to the algorithm to make it pluggable
[20:27:13]  you have IK to thank for that insight
[20:27:15]  but
[20:27:23]  I intend to make it a choice in future
[20:27:27]  like supcom
[20:27:33]  cull weakest vs attack strongest
[20:28:22]  do you mind if I repost this as a blog post?
[20:28:41] &lt;[Mr]Peanus_Butter&gt; yeah for sure; its helpful knowing how it works
[20:29:15] &lt;[Mr]Peanus_Butter&gt; i'm playing with a survival game idea with car and bob and wombat and a few others; trying to learn what i can about the various AI behaviours in spring
[20:29:26]  note
[20:29:31]  that the entire attacking system can be either
[20:29:33]  sidestepped
[20:29:35]  or replaced
[20:29:53]  all it would take is either your own behaviours, thats then assigned to attacker units
[20:29:54]  or
[20:30:05] &lt;[Mr]Peanus_Butter&gt; the other day I was testing shard against some other AI I've forgotten which and noticed the difference in attacking weak vs strong; i attributed it to a difference in threatmapping, but now i am wiser
[20:30:07]  put your own attackerhandler and attackbehaviour in your games subfolder
[20:30:21]  Shards Lua VM is set to ignore the main files if one is present in a game subdir
[20:30:29]  so itll be as if ym implementation never existed
[20:30:55]  or you can have different units use differing attack systems</pre>
]]></content:encoded>
			<wfw:commentRss>http://darkstars.co.uk/2011/shard-attacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Update</title>
		<link>http://darkstars.co.uk/2011/quick-update/</link>
		<comments>http://darkstars.co.uk/2011/quick-update/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 21:51:09 +0000</pubDate>
		<dc:creator>Tom Nowell</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://darkstars.co.uk/?p=1607</guid>
		<description><![CDATA[A quick udpate on what I&#8217;ve been up to and how things are going! Job &#38; Moving Flat I&#8217;m currently working as a Web Developer at QuadroNation, and moving flat, which has taken up quite a lot of my time the last few months. I now have keys and a move in date! So the [...]]]></description>
				<content:encoded><![CDATA[<p>A quick udpate on what I&#8217;ve been up to and how things are going!</p>
<p><span id="more-1607"></span><br />
<img class="size-full wp-image-1613 alignnone" style="margin-left:0;" title="dsquad" src="http://darkstars.co.uk/wp-content/uploads/2011/01/dsquad.jpg" alt="" width="847" height="539" /></p>
<h3>Job &amp; Moving Flat</h3>
<p>I&#8217;m currently working as a Web Developer at QuadroNation, and moving flat, which has taken up quite a lot of my time the last few months. I now have keys and a move in date! So the disruption should lessen soon and I can get back to work on my projects.</p>
<h3>Shard</h3>
<p>Work on .32 is going slowly. I have made improvements and fixes for fringe cases, but I have made no release due to a handful of problems that I&#8217;ve found in new games with the new code. Suffice to say I am behind schedule!</p>
<h3>This Website</h3>
<p>Since my last blogpost on Darkstars development, Ive made quite a few changes. However I&#8217;ve decided that I need a site attributable to me by name, one that doesn&#8217;t have people scratching their heads figuring out how to spell my email address. So I&#8217;ve been working on a second site to showcase me as a Web Developer, which is coming along nicely. I&#8217;ll then backport the changes into darkstars.co.uk</p>
<h3>Stamper</h3>
<p>Others will have noticed a lot of changes to the Stamper tool, from PNG images, to improved quality and multiple logo support! Go <a href="http://stamper.darkstars.co.uk">check it out here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://darkstars.co.uk/2011/quick-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shard 0.31 Ballsey</title>
		<link>http://darkstars.co.uk/2010/shard-0-31-ballsey/</link>
		<comments>http://darkstars.co.uk/2010/shard-0-31-ballsey/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 23:23:29 +0000</pubDate>
		<dc:creator>Tom Nowell</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Shard]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[lag]]></category>
		<category><![CDATA[NTai]]></category>
		<category><![CDATA[Spikes]]></category>

		<guid isPermaLink="false">http://darkstars.co.uk/?p=1600</guid>
		<description><![CDATA[Vast performance increases and reliability improvements have been made in Shard 0.31.Changes include: Spring v0.82.6.1 support Dramatically improved performance when searching for construction sites, spikes should no longer occur Shard will now search in a much larger radius for geothermal construction sites ( 600 -&#62; 3000 ) Shard now staggers the search radius and spacing [...]]]></description>
				<content:encoded><![CDATA[<p>Vast performance increases and reliability improvements have been made in Shard 0.31.<span id="more-1600"></span>Changes include:</p>
<ul>
<li>Spring v0.82.6.1 support</li>
<li>Dramatically improved performance when searching for construction sites, spikes should no longer occur</li>
<li>Shard will now search in a much larger radius for geothermal construction sites ( 600 -&gt; 3000 )</li>
<li>Shard now staggers the search radius and spacing of construction sites based on the size of the unit that needs building</li>
<li>Internal Architecture changes to support logic modules</li>
<li>Spike timer messages are now disabled at runtime</li>
<li>Code layout of default taskqueues changed to encourage better practises for newcomers</li>
</ul>
<p><strong><s>Download here</s></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://darkstars.co.uk/2010/shard-0-31-ballsey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shard 0.3 Hairy</title>
		<link>http://darkstars.co.uk/2010/shard-0-3-hairy/</link>
		<comments>http://darkstars.co.uk/2010/shard-0-3-hairy/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 22:15:18 +0000</pubDate>
		<dc:creator>Tom Nowell</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Shard]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[shard ai]]></category>

		<guid isPermaLink="false">http://darkstars.co.uk/?p=1554</guid>
		<description><![CDATA[This isn&#8217;t a major release but it does bring some important changes. Greatly improved performance and load balancing is the name of the game. Factories no longer search for build position wasting cpu time Builders are only allowed to move on to a new task one at a time each frame, and will wait up [...]]]></description>
				<content:encoded><![CDATA[<p>This isn&#8217;t a major release but it does bring some important changes. Greatly improved performance and load balancing is the name of the game.</p>
<p><span id="more-1554"></span></p>
<ul>
<li>Factories no longer search for build position wasting cpu time</li>
<li>Builders are only allowed to move on to a new task one at a time each frame, and will wait up to 10 frames for a free slot before executing their orders anyway to prevent clogging up the internal systems</li>
<li>Minor optimizations for extreme cases</li>
<li>Basic Conflict Terra gameplay support</li>
<li>Debug timers for detecting spikes ( uncomment in ai.lua )</li>
<li>Spring 0.82 fixes</li>
</ul>
<p><img class="size-full wp-image-1557 alignnone rounded" title="getmobilized" src="http://darkstars.co.uk/wp-content/uploads/2010/09/getmobilized.png" alt="" width="576" height="720" /><br />
These changes should greatly improve performance, and fix Shard under the latest spring release, however there are still momentary spikes in late game. These issues are being worked on. While I reduced these spikes in 0.3, they are still present and I do have ideas on how to smooth things out.</p>
<p><a href="http://www.darkstars.co.uk/downloads/view.php?file=releases/shard/Shard.0.3Hairy.rar">Download here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://darkstars.co.uk/2010/shard-0-3-hairy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shard .29 Spikey</title>
		<link>http://darkstars.co.uk/2010/shard-29-spikey/</link>
		<comments>http://darkstars.co.uk/2010/shard-29-spikey/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 21:16:58 +0000</pubDate>
		<dc:creator>Tom Nowell</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Shard]]></category>
		<category><![CDATA[spikey]]></category>

		<guid isPermaLink="false">http://darkstars.co.uk/?p=1509</guid>
		<description><![CDATA[Numerous updates, performance enhancements, and fixes over v0.25, and a new name, what&#8217;s more to be desired? Lets start with vastly improved Evolution RTS gameplay. Working with Foreboding Angel, we&#8217;ve improved performance greatly, adding support for newer units, and general efficiency improvements. I&#8217;ve also added extra behaviours to prevent massive factory spamming. Numerous API changes [...]]]></description>
				<content:encoded><![CDATA[<p>Numerous updates, performance enhancements, and fixes over v0.25, and a new name, what&#8217;s more to be desired?</p>
<p><span id="more-1509"></span>Lets start with vastly improved Evolution RTS gameplay. Working with Foreboding Angel, we&#8217;ve improved performance greatly, adding support for newer units, and general efficiency improvements. I&#8217;ve also added extra behaviours to prevent massive factory spamming.</p>
<p><a href="http://darkstars.co.uk/wp-content/uploads/2010/07/screen00199.jpg"><img class="size-full wp-image-1510 shadowed" title="screen00199" src="http://darkstars.co.uk/wp-content/uploads/2010/07/screen00199.jpg" alt="" width="542" height="518" /></a></p>
<p>Numerous API changes are included as well! A handful of additions, such as unit resource usage are added, and a major change to the existing structure with the addition of a map object, and the movement of numerous API calls to the new object.</p>
<p>Various bugs in 0.25 have also been fixed, and more safe guards are now in place. I have also added extra optimisations, and rebuilt Shard in release mode, meaning a massive performance boost when idle.</p>
<p>You can find the full API listing in the ai/preload/api.lua folder, and I have added a Shard page to my projects section which I will be filling over the next 2 months.</p>
<p><a href="http://www.darkstars.co.uk/downloads/view.php?file=releases/shard/Shard.0.29Spikey.rar">Download here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://darkstars.co.uk/2010/shard-29-spikey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shard 0.25</title>
		<link>http://darkstars.co.uk/2010/shard-0-25/</link>
		<comments>http://darkstars.co.uk/2010/shard-0-25/#comments</comments>
		<pubDate>Sun, 16 May 2010 02:53:52 +0000</pubDate>
		<dc:creator>Tom Nowell</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Shard]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://darkstars.co.uk/?p=1439</guid>
		<description><![CDATA[This release is mainly maintenance, and bug fixes, as well as minor performance improvements. I&#8217;ve also added new API functions and call outs! Bugs: Fixed a bug causing the spring API call for UnitDamaged to be sent to Shard as a UnitIdle call. UnitDamaged calls should now work correctly, and phantom UnitIdle calls should no [...]]]></description>
				<content:encoded><![CDATA[<p>This release is mainly maintenance, and bug fixes, as well as minor performance improvements. I&#8217;ve also added new API functions and call outs!<br />
<span id="more-1439"></span><br />
Bugs:</p>
<ul>
<li>Fixed a bug causing the spring API call for UnitDamaged to be sent to Shard as a UnitIdle call. UnitDamaged calls should now work correctly, and phantom UnitIdle calls should no longer exist.</li>
<li>UnitDamaged calls were never passed along from the AI object to all units and behaviour objects</li>
<li>Removed numerous debug messages</li>
<li>AttackHandler now maintains attack group sizes above a minimum value to prevent attack group sizes degrading to that of a single unit or two</li>
<li>Minor fixes to task queue management and certain failure cases that were never accounted for</li>
</ul>
<p>Optimizations:</p>
<ul>
<li>Checks added to prevent processing after the game has finished</li>
<li>Attack targeting now only checks for targets every 6 frames not every single frame</li>
<li>LUA_PATH is now set up correctly. Instead of calling game:ExecuteFile(file) or ai:ExecuteGameFile(file), you can now use the standard Lua library functions/keywords:
<ul>
<li>require &#8211; note if this fails the AI will exit and take the engine with it after printing a stacktrace to infolog.txt</li>
<li>include</li>
</ul>
</li>
</ul>
<p>Features:</p>
<ul>
<li>Added game:IsPaused()</li>
<li>UnitDamaged now has a second parameter indicating the attacker. If the attacker isn&#8217;t available, nil will be passed and must be checked for</li>
<li>Added game:MinimumWindSpeed()</li>
<li>Added game:MaximumWindSpeed()</li>
<li>Added game:TidalStrength()</li>
<li>Added unit:IsCloaked()</li>
<li>Added game:GetResource(idx)</li>
<li>Added game:GetResourceCount()</li>
<li>Added game: GetResource(name)</li>
<li>Added Resource object<br />
<code><br />
Resource {<br />
name,<br />
income,<br />
usage,<br />
capacity, --  how much we can store (-1 for unlimited)<br />
reserves, -- how much is stored<br />
gameframe, -- the game frame these stats were recorded at<br />
},</code></li>
<li>Added a new api.lua with a proxy object implementing game</li>
<li>Added a preload folder, and moved api.lua, class.lua, and aibase.lua into it</li>
<li>game:GetEnemies() now returns the enemy units in a normal lua table</li>
<li>game:GetFriendlies() now returns friendly units in a normal lua table</li>
<li>game:GetMapFeatures() now returns features in a normal lua table</li>
</ul>
<p>Functionally, the game play should be near identical to 0.21, with only tiny improvements, however, performance should increase slightly, as well as stability. I&#8217;ve also added a lot of things that were requested by content developers using Shard, which allows them to do even more things!</p>
<p><a href="http://www.darkstars.co.uk/downloads/view.php?file=releases/shard/Shard.0.25.rar">Download it here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://darkstars.co.uk/2010/shard-0-25/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 598/726 objects using disk: basic

 Served from: darkstars.co.uk @ 2013-05-20 16:33:56 by W3 Total Cache -->