<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5374010849477584511</id><updated>2011-08-19T06:34:27.800-05:00</updated><title type='text'>Elderlands</title><subtitle type='html'>Elderlands is a Retro Style Online RPG with focus on in depth story and a rich, detailed, and player controlled world.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://elderlands.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374010849477584511/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://elderlands.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jason Ely</name><uri>http://www.blogger.com/profile/16571896095067503338</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5374010849477584511.post-9085908809329079895</id><published>2010-04-13T10:15:00.002-05:00</published><updated>2010-04-13T10:27:07.556-05:00</updated><title type='text'>Ooz Object to Object communication.</title><content type='html'>&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;Ooz is the scripting language that I wrote for Elderlands and all If-Else Software games. It is a very small yet robust scripting engine. It supports micro-threading, is extendable and is designed with performance in mind.&lt;br /&gt;&lt;br /&gt;One thing I’m researching is a sort of ‘signals and slots’ system that would be integrated into the scripting language. The C++ framework called QT already supports signals and slots but has a pre-processor and is not very efficient from a performances standpoint. I need something that is performance oriented. It is very flexible in the sense that objects can hook to signals of other objects and receive callbacks through slots (class methods which are called). This works even across threads. &lt;br /&gt;&lt;br /&gt;So I’ve been pondering how to create a system that provides the flexibility of a generic signal/slot system while keeping performance the #1 priority in the Ooz language.&lt;br /&gt;&lt;br /&gt;I currently have extended the language to support an event system. Objects can register events they care about and receive a callback whenever any event is fired that they care about. Event parameters are handled through a structure which is nothing more than a container of data types that are sequentially added. Event types are defined in a large enumeration .&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;class ObjectA&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; // Register Event&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; declare ObjectA()&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegisterEvent(Event_SomethingHappens);&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; declare void OnEvent(EventType _eEvent, EventParams _kParams)&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(_eEvent==Event_SomethingHappens)&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int iParam1=_kParams.Get(0);&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Do something&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;class CObjectB&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; // Someplace in another object…&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; declare void MakeSomethingHappen(int _iParam)&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EventParams kParams=new EventParams;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; kParams.Set(0,_iParam);&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TriggerEvent(Event_SomethingHappens,kParams);&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Now an integrated signals and slot system could make the code look much cleaner and if done correctly could be more efficient. A big benefit is the system is handled internally to the language and not as part of an extension.&lt;br /&gt;&lt;br /&gt;Signals are defined like method prototypes and are fired off with the ‘emit’ keyword. The slots are receiving methods that are called when the signal is fired.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;CObjectA objA=new CObjectA;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;CObjectB objB=new CObjectB;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;// Connect objA’s slot to objB’s signal.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;connect objA.MySlot to objB.MySignal;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;// Invoke a method of objB that will fire off a signal.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;objB.DoStuff();&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;class ObjectA&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; // This is the method that will be connected to a particular&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; // signal.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; declare void MySlot(int _iParam)&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Do something&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;class ObjectB&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; // Declare an event that others can connect to.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; declare signal MySignal(int _iParam);&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; declare void DoStuff()&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Emit the signal with a given parameter.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; emit MyEvent(50);&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="color: orange;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now one area where the signals/slots system seems to have a weakness compared to the event system is when I have events that are generated on the Elderlands Game server and received by objects on the Client. Of course this could be handled by creating global objects representing the ‘server’ and have all client objects connect to the server signals they care. It would take a bit of massaging, but overall this looks like a good direction to go.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374010849477584511-9085908809329079895?l=elderlands.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elderlands.blogspot.com/feeds/9085908809329079895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://elderlands.blogspot.com/2010/04/ooz-object-to-object-communication.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374010849477584511/posts/default/9085908809329079895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374010849477584511/posts/default/9085908809329079895'/><link rel='alternate' type='text/html' href='http://elderlands.blogspot.com/2010/04/ooz-object-to-object-communication.html' title='Ooz Object to Object communication.'/><author><name>Jason Ely</name><uri>http://www.blogger.com/profile/16571896095067503338</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374010849477584511.post-6731362836956711989</id><published>2010-04-06T09:56:00.002-05:00</published><updated>2010-04-06T09:56:52.414-05:00</updated><title type='text'>Combat AI in Elderlands</title><content type='html'>&lt;b&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;Target Acquisition&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;In my previous works (Dransik) I had a very simplistic AI system. Attacking mobs looked for a target that was closest to them and went after it. Whenever they were attacked back and the attacker was closer than their current target they would switch to that target. This allowed for the ping ponging of a mob. &lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;What Elderlands does for combat AI and agro management is a bit more complex. Each entity has a list of other entities that it is upset with and a list of entities that are upset with it. Now the list of entities that we are upset with is called the threat list or agro list. Players typically ignore this list but active npcs use this to determine which npc is the most viable target.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;Whenever an entity is attacked the attacker adds agro to the list. The amount of agro is determined by the form of attack. For example a melee attack generates threat near equal to the amount of damage. When a ‘heal’ spell or any helpful spell is cast upon the any entity in our threat list will be added at 2x the value of the healed amount. This makes life a bit dangerous for support players in a battle.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;Every second the agro list is sorted by the amount of agro recorded for each entity in the list. If the new top level entity contains X% more agro than the current target then we switch targets. When an entity dies, gets too far away, or meets a few other conditions they are then removed from the list.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;For npcs when the list is empty they are out of combat and enter ‘homing’ mode. I have yet to refine the rules for players to determine when they are out of combat. This is important since health regeneration and some item cooldowns will be linked directly to the combat mode flag.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;b&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;Maintaining Agro&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;Mobs stay in combat as long as they have entities on their agro list. So how do we lost agro? A mob should understand that if it was not attacked after some time it would drop that target or at least reduce the agro value for the target.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;Npcs will also drop entities from the agro list when they meet certain criteria,&amp;nbsp; such as distance, death, certain protection spells, etc. When the npc’s agro list is empty they go into a ‘homing’ state where they attempt to return to their place of origin.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;A big question is what to do while in this homing state. Do we allow players to attack a retreating npc? In World of Warcraft evading npcs are immune to all attacks until they return to their origin. This is something I’m going to spend some time in testing before I settle for a final solution. The goal is to prevent players from exploiting npcs and using this as a way to farm XP without subjecting themselves to danger. Another precaution taken against npcs is to have them regenerate their health once they reach home. The reason for this is a player could continue to resurrect and re-attack a mob until it finally does go down. This prevents us as developers from creating difficult mobs that require players of certain levels or a certain number of players in order to default.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374010849477584511-6731362836956711989?l=elderlands.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elderlands.blogspot.com/feeds/6731362836956711989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://elderlands.blogspot.com/2010/04/combat-ai-in-elderlands.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374010849477584511/posts/default/6731362836956711989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374010849477584511/posts/default/6731362836956711989'/><link rel='alternate' type='text/html' href='http://elderlands.blogspot.com/2010/04/combat-ai-in-elderlands.html' title='Combat AI in Elderlands'/><author><name>Jason Ely</name><uri>http://www.blogger.com/profile/16571896095067503338</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374010849477584511.post-1959307288429408040</id><published>2010-04-05T09:57:00.000-05:00</published><updated>2010-04-05T10:46:29.932-05:00</updated><title type='text'>Elderlands Development Blog V1.00</title><content type='html'>Elderlands finally has a blog. Here I will post articles relating to Elderlands development, general technology/programming, rants, or whatever subject comes to mind that relates to the game or my work. So Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374010849477584511-1959307288429408040?l=elderlands.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elderlands.blogspot.com/feeds/1959307288429408040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://elderlands.blogspot.com/2010/04/elderlands-development-blog-v100.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374010849477584511/posts/default/1959307288429408040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374010849477584511/posts/default/1959307288429408040'/><link rel='alternate' type='text/html' href='http://elderlands.blogspot.com/2010/04/elderlands-development-blog-v100.html' title='Elderlands Development Blog V1.00'/><author><name>Jason Ely</name><uri>http://www.blogger.com/profile/16571896095067503338</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
