changeset 392:db6713d5b35f default-army-size

RRe #97: Default army size issues
author snowblizz
date Wed, 01 Dec 2010 20:00:58 +0000
parents 83c82e5c740c
children b90db11edc64
files IBBoard.WarFoundry.API.csproj api/Exporters/WarFoundryHtmlExporter.cs api/Factories/Xml/WarFoundryXmlGameSystemFactory.cs api/Factories/Xml/WarFoundryXmlRaceFactory.cs api/Objects/GameSystem.cs schemas/system.xsd
diffstat 6 files changed, 375 insertions(+), 355 deletions(-) [+]
line wrap: on
line diff
--- a/IBBoard.WarFoundry.API.csproj	Mon Oct 18 19:59:25 2010 +0000
+++ b/IBBoard.WarFoundry.API.csproj	Wed Dec 01 20:00:58 2010 +0000
@@ -60,7 +60,6 @@
   </Target>
   -->
   <ItemGroup>
-    <None Include="app.config" />
     <None Include="COPYING" />
     <Compile Include="api\Objects\ICostedWarFoundryObject.cs" />
     <Compile Include="api\Commands\CreateAndAddUnitCommand.cs" />
@@ -186,6 +185,10 @@
     <Content Include="libs\ICSharpCode.SharpZipLib.dll" />
   </ItemGroup>
   <ItemGroup>
+    <Reference Include="IBBoard, Version=1.0.3896.41664, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\IBBoard\bin\Release\IBBoard.dll</HintPath>
+    </Reference>
     <Reference Include="System.Data" />
     <Reference Include="System.Xml" />
     <Reference Include="System" />
@@ -195,12 +198,6 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\IBBoard\IBBoard.csproj">
-      <Project>{5DFD64F6-FC2B-4B4F-B92E-483BAC468105}</Project>
-      <Name>IBBoard</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
     <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
       <Visible>False</Visible>
       <ProductName>.NET Framework Client Profile</ProductName>
--- a/api/Exporters/WarFoundryHtmlExporter.cs	Mon Oct 18 19:59:25 2010 +0000
+++ b/api/Exporters/WarFoundryHtmlExporter.cs	Wed Dec 01 20:00:58 2010 +0000
@@ -57,7 +57,7 @@
 			metaCharset.SetAttribute("content", "text/html;charset=UTF-8");
 			head.AppendChild(metaCharset);
 			XmlElement style = doc.CreateElement("style");
-			style.InnerText = "able, th, td { border: 1px solid #000; border-spacing: 0; border-collapse: collapse; margin: 0 }\n"
+			style.InnerText = "table, th, td { border: 1px solid #000; border-spacing: 0; border-collapse: collapse; margin: 0 }\n"
 				+"table table { width: 100%; border-width: 0; margin: -2px }\n"
 				+"table table td { border-width:0 1px }";
 			head.AppendChild(style);
--- a/api/Factories/Xml/WarFoundryXmlGameSystemFactory.cs	Mon Oct 18 19:59:25 2010 +0000
+++ b/api/Factories/Xml/WarFoundryXmlGameSystemFactory.cs	Wed Dec 01 20:00:58 2010 +0000
@@ -1,97 +1,100 @@
-//  This file (WarFoundryXmlGameSystemFactory.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard
-// 
-// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Xml;
-using ICSharpCode.SharpZipLib.Zip;
-using IBBoard.Xml;
-using IBBoard.WarFoundry.API.Objects;
-
-namespace IBBoard.WarFoundry.API.Factories.Xml
-{
-	/// <summary>
-	/// A sub-factory specifically for loading GameSystems from WarFoundry XML files
-	/// </summary>
-	public class WarFoundryXmlGameSystemFactory : AbstractStagedLoadedSubFactory
-	{	
-		private Dictionary<GameSystem, XmlDocument> extraData = new Dictionary<GameSystem, XmlDocument>();
-		
-		public WarFoundryXmlGameSystemFactory(WarFoundryXmlFactory factory) : base(factory)
-		{
-		}
-		
-		private void StoreExtraData(GameSystem wfObject, XmlElement elem)
-		{
-			extraData[wfObject] = elem.OwnerDocument;
-		}
-	
-		private XmlDocument GetExtraData(GameSystem obj)
-		{
-			XmlDocument extra = null;
-			extraData.TryGetValue(obj, out extra);			
-			return extra;
-		}
-		
-		public GameSystem CreateSystemFromElement(ZipFile file, XmlElement elem)
-		{
-			string id = elem.GetAttribute("id");
-			string name = elem.GetAttribute("name");
-			GameSystem system = new GameSystem(id, name, mainFactory);
-			StoreExtraData(system, elem);
-			return system;
-		}		
-		
-		public void CompleteLoading(GameSystem system)
-		{
-			if (!WarFoundryXmlFactoryUtils.CanCompleteLoading(system))
-			{
-				return;
-			}
-			
-			system.SetAsLoading();			
-			XmlDocument extraData = GetExtraData(system);
-			LoadCategoriesForSystem(system, extraData);
-			XmlElement statsElem = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "/system:system/system:sysStatsList");
-			string defaultStatsID = statsElem.GetAttribute("defaultStats");
-			LoadSystemStatsForSystem(system, extraData);
-			system.StandardSystemStatsID = defaultStatsID;
-			XmlElement systemElement = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "/system:system");
-			system.WarnOnError = XmlTools.GetBoolValueFromAttribute(systemElement, "warn");
-			system.AllowAllies = XmlTools.GetBoolValueFromAttribute(systemElement, "allowAllies");
-			system.SetAsFullyLoaded();
-		}
-
-		
-		private void LoadCategoriesForSystem(GameSystem system, XmlNode elem)
-		{
-			foreach (XmlElement cat in WarFoundryXmlFactoryUtils.SelectNodes(elem, "/system:system/system:categories/cat:cat"))
-			{
-				system.AddCategory(CreateCategoryFromElement(cat));
-			}
-		}	
-		
-		private void LoadSystemStatsForSystem(GameSystem system, XmlNode elem)
-		{
-			foreach (XmlElement stats in WarFoundryXmlFactoryUtils.SelectNodes(elem, "/system:system/system:sysStatsList/system:sysStats"))
-			{
-				SystemStats sysStats = CreateSystemStatsFromElement(stats);
-				system.AddSystemStats(sysStats);
-			}
-		}
-		
-		private SystemStats CreateSystemStatsFromElement(XmlElement elem)
-		{
-			SystemStats sysStats = new SystemStats(elem.GetAttribute("id"));
-			
-			foreach (XmlElement slot in WarFoundryXmlFactoryUtils.SelectNodes(elem, "system:sysStat"))
-			{
-				sysStats.AddStatSlot(slot.GetAttribute("name"));
-			}
-
-			return sysStats;
-		}	
-	}
-}
+//  This file (WarFoundryXmlGameSystemFactory.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard
+// 
+// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+using ICSharpCode.SharpZipLib.Zip;
+using IBBoard.Xml;
+using IBBoard.WarFoundry.API.Objects;
+
+namespace IBBoard.WarFoundry.API.Factories.Xml
+{
+	/// <summary>
+	/// A sub-factory specifically for loading GameSystems from WarFoundry XML files
+	/// </summary>
+	public class WarFoundryXmlGameSystemFactory : AbstractStagedLoadedSubFactory
+	{	
+		private Dictionary<GameSystem, XmlDocument> extraData = new Dictionary<GameSystem, XmlDocument>();
+		
+		public WarFoundryXmlGameSystemFactory(WarFoundryXmlFactory factory) : base(factory)
+		{
+		}
+		
+		private void StoreExtraData(GameSystem wfObject, XmlElement elem)
+		{
+			extraData[wfObject] = elem.OwnerDocument;
+		}
+	
+		private XmlDocument GetExtraData(GameSystem obj)
+		{
+			XmlDocument extra = null;
+			extraData.TryGetValue(obj, out extra);			
+			return extra;
+		}
+		
+		public GameSystem CreateSystemFromElement(ZipFile file, XmlElement elem)
+		{
+			string id = elem.GetAttribute("id");
+			string name = elem.GetAttribute("name");
+            GameSystem system = new GameSystem(id, name, mainFactory);
+            int defaultarmysize = XmlTools.GetIntValueFromAttribute(elem,"defaultArmySize");
+            system.SystemArmyDefaultSize = defaultarmysize;
+			StoreExtraData(system, elem);
+			return system;
+            
+		}		
+		
+		public void CompleteLoading(GameSystem system)
+        {
+			if (!WarFoundryXmlFactoryUtils.CanCompleteLoading(system))
+			{
+				return;
+			}
+			
+			system.SetAsLoading();			
+			XmlDocument extraData = GetExtraData(system);
+			LoadCategoriesForSystem(system, extraData);
+			XmlElement statsElem = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "/system:system/system:sysStatsList");
+			string defaultStatsID = statsElem.GetAttribute("defaultStats");
+			LoadSystemStatsForSystem(system, extraData);
+			system.StandardSystemStatsID = defaultStatsID;
+			XmlElement systemElement = WarFoundryXmlFactoryUtils.SelectSingleElement(extraData, "/system:system");
+			system.WarnOnError = XmlTools.GetBoolValueFromAttribute(systemElement, "warn");
+			system.AllowAllies = XmlTools.GetBoolValueFromAttribute(systemElement, "allowAllies");
+			system.SetAsFullyLoaded();
+		}
+
+		
+		private void LoadCategoriesForSystem(GameSystem system, XmlNode elem)
+		{
+			foreach (XmlElement cat in WarFoundryXmlFactoryUtils.SelectNodes(elem, "/system:system/system:categories/cat:cat"))
+			{
+				system.AddCategory(CreateCategoryFromElement(cat));
+			}
+		}	
+		
+		private void LoadSystemStatsForSystem(GameSystem system, XmlNode elem)
+		{
+			foreach (XmlElement stats in WarFoundryXmlFactoryUtils.SelectNodes(elem, "/system:system/system:sysStatsList/system:sysStats"))
+			{
+				SystemStats sysStats = CreateSystemStatsFromElement(stats);
+				system.AddSystemStats(sysStats);
+			}
+		}
+		
+		private SystemStats CreateSystemStatsFromElement(XmlElement elem)
+		{
+			SystemStats sysStats = new SystemStats(elem.GetAttribute("id"));
+			
+			foreach (XmlElement slot in WarFoundryXmlFactoryUtils.SelectNodes(elem, "system:sysStat"))
+			{
+				sysStats.AddStatSlot(slot.GetAttribute("name"));
+			}
+
+			return sysStats;
+		}	
+	}
+}
Binary file api/Factories/Xml/WarFoundryXmlRaceFactory.cs has changed
--- a/api/Objects/GameSystem.cs	Mon Oct 18 19:59:25 2010 +0000
+++ b/api/Objects/GameSystem.cs	Wed Dec 01 20:00:58 2010 +0000
@@ -1,250 +1,269 @@
-// This file (GameSystem.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2007, 2008, 2009 IBBoard.
-//
-// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
-
-using System;
-using System.Collections.Generic;
-using System.Xml;
-using System.IO;
-using IBBoard.Logging;
-using IBBoard.WarFoundry.API.Factories;
-using ICSharpCode.SharpZipLib.Zip;
-
-namespace IBBoard.WarFoundry.API.Objects
-{
-	/// <summary>
-	/// Summary description for GameSystem.
-	/// </summary>
-	public class GameSystem : WarFoundryStagedLoadingObject
-	{
-		private bool warnOnError;
-		private bool allowAllies;
-		private Dictionary<string, Category> categories = new Dictionary<string,Category>();
-		private Dictionary<string, SystemStats> stats = new Dictionary<string,SystemStats>();
-		private string defaultStats;
-
-		public GameSystem(string systemID, string systemName, IWarFoundryFactory creatingFactory) : base(systemID, systemName, creatingFactory)
-		{
-			stats = new Dictionary<string,SystemStats>();
-		}
-		
-		public bool AllowAllies
-		{
-			get { return allowAllies; }
-			set { allowAllies = value; }
-		}
-		
-		public void AddCategory(Category cat)
-		{
-			RawCategories[cat.ID] = cat;
-		}
-
-		public Category GetCategory(string id)
-		{
-			EnsureFullyLoaded();
-			Category cat = null;
-			RawCategories.TryGetValue(id, out cat);
-			return cat;
-		}
-
-		public Category[] Categories
-		{
-			get 
-			{ 
-				EnsureFullyLoaded();
-				return DictionaryUtils.ToArray<string, Category>(RawCategories); 
-			}
-		}
-		
-		protected Dictionary<string, Category> RawCategories
-		{
-			get { return categories; }
-		}
-
-		public bool WarnOnError
-		{
-			get
-			{
-				return warnOnError;
-			}
-			set { warnOnError = value; }
-		}
-		
-		public void AddSystemStats(SystemStats sysStats)
-		{
-			stats[sysStats.ID] = sysStats;
-		}
-		
-		public SystemStats StandardSystemStats
-		{
-			get
-			{
-				EnsureFullyLoaded();
-				return stats[defaultStats];
-			}
-		}
-		
-		public string StandardSystemStatsID
-		{
-			get
-			{
-				EnsureFullyLoaded();
-				return defaultStats;
-			}
-			
-			set
-			{
-				if (value != null && value.Trim().Length > 0)
-				{
-					defaultStats = value;
-				}
-			}
-		}
-
-		public SystemStats[] SystemStats
-		{
-			get 
-			{ 
-				EnsureFullyLoaded();
-				SystemStats[] statsArray = new SystemStats[stats.Count];
-				stats.Values.CopyTo(statsArray, 0);
-				return statsArray;
-			}
-		}
-		
-		public SystemStats GetSystemStatsForID(string id)
-		{
-			EnsureFullyLoaded();
-			SystemStats statsForID;
-			stats.TryGetValue(id, out statsForID);
-			return statsForID;
-		}
-		
-		public Race SystemDefaultRace
-		{
-			get { return WarFoundryLoader.GetDefault().GetRace(this, Race.SYSTEM_DEFAULT_RACE_ID); }
-		}
-
-		public bool Matches(GameSystem otherSystem)
-		{
-			if (otherSystem==null)
-			{
-				return false;
-			}
-
-			return this.ID == otherSystem.ID;
-		}
-
-		public override bool Equals(object obj)
-		{
-			if (obj == null)
-			{
-				return false;		
-			}
-			
-			if (obj.GetType().Equals(this.GetType()))
-			{
-				GameSystem otherSystem = (GameSystem)obj;
-
-				return this.ID == otherSystem.ID && this.Name == otherSystem.Name && ((this.RawCategories == null && otherSystem.RawCategories == null) || this.RawCategories.Equals(otherSystem.RawCategories));
-			}
-			else
-			{
-				return false;
-			}
-		}
-
-		public override int GetHashCode()
-		{
-			return ID.GetHashCode() + Name.GetHashCode() + (RawCategories!=null ? RawCategories.GetHashCode() : 0) + warnOnError.GetHashCode();
-		}
-
-		public bool UnitTypeMaxed(UnitType unitType, Army army)
-		{
-			return unitType.MaxNumber!=WarFoundryCore.INFINITY && army.GetUnitTypeCount(unitType) >= unitType.MaxNumber;
-		}
-
-		public bool UnitTypeMinned(UnitType unitType, Army army)
-		{
-			return army.GetUnitTypeCount(unitType) <= unitType.MinNumber;
-		}
-		
-		public List<EquipmentItem> GetSystemEquipmentList()
-		{
-			List<EquipmentItem> items = new List<EquipmentItem>();
-			Race defaultRace = SystemDefaultRace;
-			
-			if (defaultRace!=null)
-			{				
-				items = defaultRace.GetEquipmentList();
-			}
-			
-			return items;
-		}
-				
-		public EquipmentItem GetSystemEquipmentItem(string id)
-		{
-			EquipmentItem item = null;
-			Race defaultRace = SystemDefaultRace;
-			
-			if (defaultRace!=null)
-			{				
-				item = defaultRace.GetEquipmentItem(id);
-			}
-			
-			return item;
-		}
-		
-		public UnitType[] GetSystemUnitTypes(Category cat)
-		{
-			UnitType[] items = new UnitType[0];
-			Race defaultRace = SystemDefaultRace;
-			
-			if (defaultRace!=null)
-			{				
-				items = defaultRace.GetUnitTypes(cat);
-			}
-			
-			return items;
-		}
-				
-		public UnitType GetSystemUnitType(string id)
-		{
-			UnitType unit = null;
-			Race defaultRace = SystemDefaultRace;
-			
-			if (defaultRace!=null)
-			{				
-				unit = defaultRace.GetUnitType(id);
-			}
-			
-			return unit;
-		}
-		
-		public List<Ability> GetSystemAbilityList()
-		{
-			List<Ability> items = new List<Ability>();
-			Race defaultRace = SystemDefaultRace;
-			
-			if (defaultRace!=null)
-			{				
-				items = defaultRace.GetAbilityList();
-			}
-			
-			return items;
-		}
-				
-		public Ability GetSystemAbility(string id)
-		{
-			Ability ability = null;
-			Race defaultRace = SystemDefaultRace;
-			
-			if (defaultRace!=null)
-			{				
-				ability = defaultRace.GetAbility(id);
-			}
-			
-			return ability;
-		}
-	}
-}
+// This file (GameSystem.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2007, 2008, 2009 IBBoard.
+//
+// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
+
+using System;
+using System.Collections.Generic;
+using System.Xml;
+using System.IO;
+using IBBoard.Logging;
+using IBBoard.WarFoundry.API.Factories;
+using ICSharpCode.SharpZipLib.Zip;
+
+namespace IBBoard.WarFoundry.API.Objects
+{
+	/// <summary>
+	/// Summary description for GameSystem.
+	/// </summary>
+	public class GameSystem : WarFoundryStagedLoadingObject
+	{
+        
+        private bool warnOnError;
+		private bool allowAllies;
+		private Dictionary<string, Category> categories = new Dictionary<string,Category>();
+		private Dictionary<string, SystemStats> stats = new Dictionary<string,SystemStats>();
+		private string defaultStats;
+        private int defaultArmySize;
+
+        public GameSystem(string systemID, string systemName, IWarFoundryFactory creatingFactory)
+            : base(systemID, systemName, creatingFactory)
+		{
+			stats = new Dictionary<string,SystemStats>();
+		}
+
+        public int SystemArmyDefaultSize
+        {
+            get { return  defaultArmySize; }
+            set
+            {
+                if (value == 0)
+                {
+                    defaultArmySize = 1;
+                    throw new ArgumentException("No default system army size");
+                    
+                }
+                
+                 defaultArmySize =  value;
+            }
+        }
+		
+		public bool AllowAllies
+		{
+			get { return allowAllies; }
+			set { allowAllies = value; }
+		}
+		
+		public void AddCategory(Category cat)
+		{
+			RawCategories[cat.ID] = cat;
+		}
+
+		public Category GetCategory(string id)
+		{
+			EnsureFullyLoaded();
+			Category cat = null;
+			RawCategories.TryGetValue(id, out cat);
+			return cat;
+		}
+
+		public Category[] Categories
+		{
+			get 
+			{ 
+				EnsureFullyLoaded();
+				return DictionaryUtils.ToArray<string, Category>(RawCategories); 
+			}
+		}
+		
+		protected Dictionary<string, Category> RawCategories
+		{
+			get { return categories; }
+		}
+
+		public bool WarnOnError
+		{
+			get
+			{
+				return warnOnError;
+			}
+			set { warnOnError = value; }
+		}
+		
+		public void AddSystemStats(SystemStats sysStats)
+		{
+			stats[sysStats.ID] = sysStats;
+		}
+		
+		public SystemStats StandardSystemStats
+		{
+			get
+			{
+				EnsureFullyLoaded();
+				return stats[defaultStats];
+			}
+		}
+		
+		public string StandardSystemStatsID
+		{
+			get
+			{
+				EnsureFullyLoaded();
+				return defaultStats;
+			}
+			
+			set
+			{
+				if (value != null && value.Trim().Length > 0)
+				{
+					defaultStats = value;
+				}
+			}
+		}
+
+		public SystemStats[] SystemStats
+		{
+			get 
+			{ 
+				EnsureFullyLoaded();
+				SystemStats[] statsArray = new SystemStats[stats.Count];
+				stats.Values.CopyTo(statsArray, 0);
+				return statsArray;
+			}
+		}
+		
+		public SystemStats GetSystemStatsForID(string id)
+		{
+			EnsureFullyLoaded();
+			SystemStats statsForID;
+			stats.TryGetValue(id, out statsForID);
+			return statsForID;
+		}
+		
+		public Race SystemDefaultRace
+		{
+			get { return WarFoundryLoader.GetDefault().GetRace(this, Race.SYSTEM_DEFAULT_RACE_ID); }
+		}
+
+		public bool Matches(GameSystem otherSystem)
+		{
+			if (otherSystem==null)
+			{
+				return false;
+			}
+
+			return this.ID == otherSystem.ID;
+		}
+
+		public override bool Equals(object obj)
+		{
+			if (obj == null)
+			{
+				return false;		
+			}
+			
+			if (obj.GetType().Equals(this.GetType()))
+			{
+				GameSystem otherSystem = (GameSystem)obj;
+
+				return this.ID == otherSystem.ID && this.Name == otherSystem.Name && ((this.RawCategories == null && otherSystem.RawCategories == null) || this.RawCategories.Equals(otherSystem.RawCategories));
+			}
+			else
+			{
+				return false;
+			}
+		}
+
+		public override int GetHashCode()
+		{
+			return ID.GetHashCode() + Name.GetHashCode() + (RawCategories!=null ? RawCategories.GetHashCode() : 0) + warnOnError.GetHashCode();
+		}
+
+		public bool UnitTypeMaxed(UnitType unitType, Army army)
+		{
+			return unitType.MaxNumber!=WarFoundryCore.INFINITY && army.GetUnitTypeCount(unitType) >= unitType.MaxNumber;
+		}
+
+		public bool UnitTypeMinned(UnitType unitType, Army army)
+		{
+			return army.GetUnitTypeCount(unitType) <= unitType.MinNumber;
+		}
+		
+		public List<EquipmentItem> GetSystemEquipmentList()
+		{
+			List<EquipmentItem> items = new List<EquipmentItem>();
+			Race defaultRace = SystemDefaultRace;
+			
+			if (defaultRace!=null)
+			{				
+				items = defaultRace.GetEquipmentList();
+			}
+			
+			return items;
+		}
+				
+		public EquipmentItem GetSystemEquipmentItem(string id)
+		{
+			EquipmentItem item = null;
+			Race defaultRace = SystemDefaultRace;
+			
+			if (defaultRace!=null)
+			{				
+				item = defaultRace.GetEquipmentItem(id);
+			}
+			
+			return item;
+		}
+		
+		public UnitType[] GetSystemUnitTypes(Category cat)
+		{
+			UnitType[] items = new UnitType[0];
+			Race defaultRace = SystemDefaultRace;
+			
+			if (defaultRace!=null)
+			{				
+				items = defaultRace.GetUnitTypes(cat);
+			}
+			
+			return items;
+		}
+				
+		public UnitType GetSystemUnitType(string id)
+		{
+			UnitType unit = null;
+			Race defaultRace = SystemDefaultRace;
+			
+			if (defaultRace!=null)
+			{				
+				unit = defaultRace.GetUnitType(id);
+			}
+			
+			return unit;
+		}
+		
+		public List<Ability> GetSystemAbilityList()
+		{
+			List<Ability> items = new List<Ability>();
+			Race defaultRace = SystemDefaultRace;
+			
+			if (defaultRace!=null)
+			{				
+				items = defaultRace.GetAbilityList();
+			}
+			
+			return items;
+		}
+				
+		public Ability GetSystemAbility(string id)
+		{
+			Ability ability = null;
+			Race defaultRace = SystemDefaultRace;
+			
+			if (defaultRace!=null)
+			{				
+				ability = defaultRace.GetAbility(id);
+			}
+			
+			return ability;
+		}
+	}
+}
--- a/schemas/system.xsd	Mon Oct 18 19:59:25 2010 +0000
+++ b/schemas/system.xsd	Wed Dec 01 20:00:58 2010 +0000
@@ -39,6 +39,7 @@
 		</xs:sequence>
 		<xs:attribute name="id" type="xs:string" />
 		<xs:attribute name="name" type="xs:string" use="required"/>
+    <xs:attribute name="defaultArmySize" type="core:nonNegativeNonInfiniteDouble" default="0"/>
 		<xs:attribute name="warn" type="xs:boolean" default="false"/>
 		<xs:attribute name="allowAllies" type="xs:boolean" default="true"/>
 		<xs:anyAttribute processContents="lax"/>