diff --git a/SAGE/Games/Kane's Wrath/AptAptData.cs b/SAGE/Games/Kane's Wrath/AptAptData.cs
new file mode 100644
index 0000000..01c604f
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/AptAptData.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+using Files;
+using SAGE;
+
+namespace SAGE.Compiler
+{
+ public class AptAptData : CompileHandler
+ {
+ public override bool Compile(GameAssetType gameAsset, Uri baseUri, BinaryAsset asset, XmlNode node, GameDefinition game,
+ string trace, ref int position, out string ErrorDescription)
+ {
+ BinaryAsset blob = new BinaryAsset(0);
+ string file = null;
+ foreach (XmlAttribute attribute in node.Attributes)
+ {
+ switch (attribute.Name)
+ {
+ case "File":
+ file = attribute.Value;
+ break;
+ }
+ }
+ if (file == null)
+ {
+ ErrorDescription = string.Format("No file set for {0}", trace);
+ return false;
+ }
+ Uri fileUri = Macro.Parse(file);
+ if (!fileUri.IsAbsoluteUri)
+ {
+ fileUri = new Uri(baseUri, fileUri);
+ }
+ file = fileUri.LocalPath;
+ if (!File.Exists(file))
+ {
+ ErrorDescription = string.Format("File not found for {0}", trace);
+ return false;
+ }
+ using (FileStream blobStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
+ {
+ using (BinaryReader blobReader = new BinaryReader(blobStream))
+ {
+ blob.Content = blobReader.ReadBytes((int)(blobStream.Length));
+ }
+ }
+ asset.SubAssets.Add(0x04, blob);
+ FileHelper.SetInt(blob.Content.Length, 0x08, asset.Content);
+ ErrorDescription = string.Empty;
+ return true;
+ }
+ }
+}
diff --git a/SAGE/Games/Kane's Wrath/AptAssets.xml b/SAGE/Games/Kane's Wrath/AptAssets.xml
new file mode 100644
index 0000000..bcc4add
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/AptAssets.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/AptConstData.cs b/SAGE/Games/Kane's Wrath/AptConstData.cs
new file mode 100644
index 0000000..e99d8d8
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/AptConstData.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+using Files;
+using SAGE;
+
+namespace SAGE.Compiler
+{
+ public class AptConstData : CompileHandler
+ {
+ public override bool Compile(GameAssetType gameAsset, Uri baseUri, BinaryAsset asset, XmlNode node, GameDefinition game,
+ string trace, ref int position, out string ErrorDescription)
+ {
+ BinaryAsset blob = new BinaryAsset(0);
+ string file = null;
+ foreach (XmlAttribute attribute in node.Attributes)
+ {
+ switch (attribute.Name)
+ {
+ case "File":
+ file = attribute.Value;
+ break;
+ }
+ }
+ if (file == null)
+ {
+ ErrorDescription = string.Format("No file set for {0}", trace);
+ return false;
+ }
+ Uri fileUri = Macro.Parse(file);
+ if (!fileUri.IsAbsoluteUri)
+ {
+ fileUri = new Uri(baseUri, fileUri);
+ }
+ file = fileUri.LocalPath;
+ if (!File.Exists(file))
+ {
+ ErrorDescription = string.Format("File not found for {0}", trace);
+ return false;
+ }
+ using (FileStream blobStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
+ {
+ using (BinaryReader blobReader = new BinaryReader(blobStream))
+ {
+ blob.Content = blobReader.ReadBytes((int)(blobStream.Length));
+ }
+ }
+ asset.SubAssets.Add(0x04, blob);
+ FileHelper.SetInt(blob.Content.Length, 0x08, asset.Content);
+ ErrorDescription = string.Empty;
+ return true;
+ }
+ }
+}
diff --git a/SAGE/Games/Kane's Wrath/AptDatData.cs b/SAGE/Games/Kane's Wrath/AptDatData.cs
new file mode 100644
index 0000000..e99d8d8
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/AptDatData.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+using Files;
+using SAGE;
+
+namespace SAGE.Compiler
+{
+ public class AptConstData : CompileHandler
+ {
+ public override bool Compile(GameAssetType gameAsset, Uri baseUri, BinaryAsset asset, XmlNode node, GameDefinition game,
+ string trace, ref int position, out string ErrorDescription)
+ {
+ BinaryAsset blob = new BinaryAsset(0);
+ string file = null;
+ foreach (XmlAttribute attribute in node.Attributes)
+ {
+ switch (attribute.Name)
+ {
+ case "File":
+ file = attribute.Value;
+ break;
+ }
+ }
+ if (file == null)
+ {
+ ErrorDescription = string.Format("No file set for {0}", trace);
+ return false;
+ }
+ Uri fileUri = Macro.Parse(file);
+ if (!fileUri.IsAbsoluteUri)
+ {
+ fileUri = new Uri(baseUri, fileUri);
+ }
+ file = fileUri.LocalPath;
+ if (!File.Exists(file))
+ {
+ ErrorDescription = string.Format("File not found for {0}", trace);
+ return false;
+ }
+ using (FileStream blobStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
+ {
+ using (BinaryReader blobReader = new BinaryReader(blobStream))
+ {
+ blob.Content = blobReader.ReadBytes((int)(blobStream.Length));
+ }
+ }
+ asset.SubAssets.Add(0x04, blob);
+ FileHelper.SetInt(blob.Content.Length, 0x08, asset.Content);
+ ErrorDescription = string.Empty;
+ return true;
+ }
+ }
+}
diff --git a/SAGE/Games/Kane's Wrath/AptGeometryData.cs b/SAGE/Games/Kane's Wrath/AptGeometryData.cs
new file mode 100644
index 0000000..567b65c
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/AptGeometryData.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+using Files;
+using SAGE;
+
+namespace SAGE.Compiler
+{
+ public class AptConstData : CompileHandler
+ {
+ public override bool Compile(GameAssetType gameAsset, Uri baseUri, BinaryAsset asset, XmlNode node, GameDefinition game,
+ string trace, ref int position, out string ErrorDescription)
+ {
+ BinaryAsset blob = new BinaryAsset(0);
+ string file = null;
+ foreach (XmlAttribute attribute in node.Attributes)
+ {
+ switch (attribute.Name)
+ {
+ case "File":
+ file = attribute.Value;
+ break;
+ case "AptID":
+ FileHelper.SetInt(int.Parse(attribute.Value), 0x0C, asset.Content);
+ break;
+ }
+ }
+ if (file == null)
+ {
+ ErrorDescription = string.Format("No file set for {0}", trace);
+ return false;
+ }
+ Uri fileUri = Macro.Parse(file);
+ if (!fileUri.IsAbsoluteUri)
+ {
+ fileUri = new Uri(baseUri, fileUri);
+ }
+ file = fileUri.LocalPath;
+ if (!File.Exists(file))
+ {
+ ErrorDescription = string.Format("File not found for {0}", trace);
+ return false;
+ }
+ using (FileStream blobStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
+ {
+ using (BinaryReader blobReader = new BinaryReader(blobStream))
+ {
+ blob.Content = blobReader.ReadBytes((int)(blobStream.Length));
+ }
+ }
+ asset.SubAssets.Add(0x04, blob);
+ FileHelper.SetInt(blob.Content.Length, 0x08, asset.Content);
+ ErrorDescription = string.Empty;
+ return true;
+ }
+ }
+}
diff --git a/SAGE/Games/Kane's Wrath/Audio.xml b/SAGE/Games/Kane's Wrath/Audio.xml
index 7699f7c..fb231fb 100644
--- a/SAGE/Games/Kane's Wrath/Audio.xml
+++ b/SAGE/Games/Kane's Wrath/Audio.xml
@@ -1,68 +1,454 @@
+
+ NONE
+ XAS
+ EALAYER3
+
+
+
+ NONE
+ XAS
+ EALAYER3
+
+
+
+
+
+
+
+
+
+
+
+
+ TypeHash="822598043"
+ HasSpecialCompileHandling="true">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+ LOWEST
+ LOW
+ NORMAL
+ HIGH
+ HIGHEST
+ CRITICAL
+
+
+
+ SOUNDFX
+ VOICE
+ MUSIC
+ AMBIENT
+ MOVIE
+ NONE
+
+
+
+
+
+
+
+
+ UI
+ WORLD
+ SHROUDED
+ VOICE
+ PLAYER
+ ALLIES
+ ENEMIES
+ EVERYONE
+
+
+
+
+
+ LOOP
+ SEQUENTIAL
+ RANDOMSTART
+ INTERRUPT
+ FADE_ON_KILL
+ FADE_ON_START
+ ALLOW_KILL_MID_FILE
+
+
+
+
+
-
-
-
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TypeHash="3556692593">
+
+
+
+ TypeHash="3167789449">
+
+ TypeHash="1717852637">
+
-
+
+ TypeHash="532307505">
+
+
+ LOOP
+ PLAY_ONE
+
+
+
+
+ TypeHash="2768493560">
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/BootupDisplaySequence.xml b/SAGE/Games/Kane's Wrath/BootupDisplaySequence.xml
new file mode 100644
index 0000000..550c3fc
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/BootupDisplaySequence.xml
@@ -0,0 +1,64 @@
+
+
+
+
+ STATIC_SCREEN
+ LOAD_SCREEN
+ MOVIE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/CampaignManager.xml b/SAGE/Games/Kane's Wrath/CampaignManager.xml
index 9b5a855..ddd8b58 100644
--- a/SAGE/Games/Kane's Wrath/CampaignManager.xml
+++ b/SAGE/Games/Kane's Wrath/CampaignManager.xml
@@ -194,6 +194,13 @@
IsVoid="true" />
+
+
+
+
@@ -229,6 +236,13 @@
MaxLength="0" />
+
+
+
+
diff --git a/SAGE/Games/Kane's Wrath/DLContent.xml b/SAGE/Games/Kane's Wrath/DLContent.xml
new file mode 100644
index 0000000..612969c
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/DLContent.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/ExperienceLevelTemplate.xml b/SAGE/Games/Kane's Wrath/ExperienceLevelTemplate.xml
index a1c7cc9..de96b18 100644
--- a/SAGE/Games/Kane's Wrath/ExperienceLevelTemplate.xml
+++ b/SAGE/Games/Kane's Wrath/ExperienceLevelTemplate.xml
@@ -13,6 +13,13 @@
IsAttribute="true" />
+
+
+
+
diff --git a/SAGE/Games/Kane's Wrath/FXList.xml b/SAGE/Games/Kane's Wrath/FXList.xml
index a10a1f8..ea0c74f 100644
--- a/SAGE/Games/Kane's Wrath/FXList.xml
+++ b/SAGE/Games/Kane's Wrath/FXList.xml
@@ -39,6 +39,11 @@
id="StopIfPlayed"
AssetType="SageBool"
IsAttribute="true" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/InGameUICommonCommandSlots.xml b/SAGE/Games/Kane's Wrath/InGameUICommonCommandSlots.xml
new file mode 100644
index 0000000..55c0bca
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/InGameUICommonCommandSlots.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/InGameUIFixedElementHotKeySlotMap.xml b/SAGE/Games/Kane's Wrath/InGameUIFixedElementHotKeySlotMap.xml
new file mode 100644
index 0000000..9ff7f08
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/InGameUIFixedElementHotKeySlotMap.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/InGameUITacticalCommandSlots.xml b/SAGE/Games/Kane's Wrath/InGameUITacticalCommandSlots.xml
new file mode 100644
index 0000000..78e6a48
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/InGameUITacticalCommandSlots.xml
@@ -0,0 +1,404 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/MusicScript.xml b/SAGE/Games/Kane's Wrath/MusicScript.xml
index 5750665..23ec650 100644
--- a/SAGE/Games/Kane's Wrath/MusicScript.xml
+++ b/SAGE/Games/Kane's Wrath/MusicScript.xml
@@ -8,6 +8,20 @@
AssetType="BaseAssetType" />
+
+
+
+
+
+
+
+
+
+
+
+ UNKNOWN
+ PENTIUM_4
+ CORE_DUO
+ ATHLON
+ ATHLON_64
+
+
+
+ UNKNOWN
+ GENERIC_PIXEL_SHADER_1
+ GEFORCE_5_LOW
+ GEFORCE_3
+ RADEON_8_AND_9_LOW
+ GEFORCE_4
+ GEFORCE_5_MEDIUM
+ GEFORCE_6_LOW
+ _MINIMUM_FOR_LOW_LOD
+ GENERIC_PIXEL_SHADER_2
+ GEFORCE_5_HIGH
+ RADEON_9_MEDIUM
+ RADEON_X_LOW
+ _MINIMUM_FOR_MEDIUM_LOD
+ GEFORCE_6_MEDIUM
+ RADEON_X1_LOW
+ RADEON_9_HIGH
+ RADEON_X_MEDIUM
+ GEFORCE_7_LOW
+ RADEON_X1_MEDIUM
+ RADEON_HD_MEDIUM
+ _MINIMUM_FOR_HIGH_LOD
+ RADEON_X_HIGH
+ GENERIC_PIXEL_SHADER_3
+ GEFORCE_6_HIGH
+ GEFORCE_7_MEDIUM
+ _MINIMUM_FOR_ULTRA_HIGH_LOD
+ RADEON_X1_HIGH
+ GEFORCE_7_HIGH
+ GEFORCE_8_HIGH
+
+
+
+ UNKNOWN
+ VERY_LOW
+ LOW
+ MEDIUM
+ HIGH
+ ULTRA_HIGH
+ CUSTOM
+
+
+
+ LOW
+ MEDIUM
+ HIGH
+ ULTRA_HIGH
+
+
+
+ UNKNOWN
+ LOW
+ HIGH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/TheVersion.xml b/SAGE/Games/Kane's Wrath/TheVersion.xml
new file mode 100644
index 0000000..c61ce18
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/TheVersion.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/UIConfigList.xml b/SAGE/Games/Kane's Wrath/UIConfigList.xml
new file mode 100644
index 0000000..25065b0
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/UIConfigList.xml
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INGAME
+ SHELL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/VideoSequence.xml b/SAGE/Games/Kane's Wrath/VideoSequence.xml
new file mode 100644
index 0000000..7fd5e3a
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/VideoSequence.xml
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LEFT
+ RIGHT
+ CENTER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SAGE/Games/Kane's Wrath/WaterTransparency.xml b/SAGE/Games/Kane's Wrath/WaterTransparency.xml
new file mode 100644
index 0000000..d0b93b2
--- /dev/null
+++ b/SAGE/Games/Kane's Wrath/WaterTransparency.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file