diff --git a/MapViewer/IniFile.cs b/MapViewer/IniFile.cs new file mode 100644 index 0000000000..8161af4f40 --- /dev/null +++ b/MapViewer/IniFile.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Text.RegularExpressions; + +namespace MapViewer +{ + class IniFile + { + Dictionary sections = new Dictionary(); + IniSection currentSection; + + public IniFile(Stream s) + { + + StreamReader reader = new StreamReader(s); + while (!reader.EndOfStream) + { + string line = reader.ReadLine(); + if (!ProcessEntry(line)) + ProcessSection(line); + } + } + + Regex sectionPattern = new Regex(@"\[([^]]*)\]"); + Regex entryPattern = new Regex(@"([^=]+)=([^;]*)"); + + bool ProcessSection(string line) + { + Match m = sectionPattern.Match(line); + if (m == null || !m.Success) + return false; + + string sectionName = m.Groups[1].Value; + currentSection = new IniSection(sectionName); + sections.Add(sectionName, currentSection); + + return true; + } + + bool ProcessEntry(string line) + { + Match m = entryPattern.Match(line); + if (m == null || !m.Success) + return false; + + if (currentSection == null) + throw new InvalidOperationException("No current INI section"); + + string keyName = m.Groups[1].Value; + string keyValue = m.Groups[2].Value; + + currentSection.Add(keyName, keyValue); + + return true; + } + + public IniSection GetSection(string s) + { + IniSection section; + sections.TryGetValue(s, out section); + return section; + } + } + + class IniSection + { + string name; + Dictionary values = new Dictionary(); + + public IniSection(string name) + { + this.name = name; + } + + public void Add(string key, string value) + { + values.Add(key, value); + } + + public string GetValue(string key, string defaultValue) + { + string s; + return values.TryGetValue( key, out s ) ? s : defaultValue; + } + } +} diff --git a/MapViewer/MapViewer.csproj b/MapViewer/MapViewer.csproj new file mode 100644 index 0000000000..4513cdf8f8 --- /dev/null +++ b/MapViewer/MapViewer.csproj @@ -0,0 +1,50 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {3942F56A-F427-4DE0-928A-89DEA952FF5F} + Exe + Properties + MapViewer + MapViewer + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MapViewer/Program.cs b/MapViewer/Program.cs new file mode 100644 index 0000000000..9a550f564e --- /dev/null +++ b/MapViewer/Program.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Windows.Forms; + +namespace MapViewer +{ + class Program + { + static Stream GetFile() + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.RestoreDirectory = true; + ofd.Filter = "Map files (*.ini)|*.ini"; + + return (DialogResult.OK == ofd.ShowDialog()) ? ofd.OpenFile() : null; + } + + static void Main(string[] args) + { + Stream s = GetFile(); + if (s == null) + { + Console.WriteLine("Fail"); + return; + } + + IniFile iniFile = new IniFile(s); + Console.WriteLine("Done."); + + IniSection basic = iniFile.GetSection("Basic"); + Console.WriteLine("Name: {0}", basic.GetValue("Name", "(null)")); + Console.WriteLine("Official: {0}", basic.GetValue("Official", "no")); + + IniSection map = iniFile.GetSection("Map"); + Console.WriteLine("Theater: {0}", map.GetValue("Theater", "TEMPERATE")); + Console.WriteLine("X: {0} Y: {1} Width: {2} Height: {3}", + map.GetValue("X", "0"), map.GetValue("Y", "0"), + map.GetValue("Width", "0"), map.GetValue("Height", "0")); + } + } +} diff --git a/MapViewer/Properties/AssemblyInfo.cs b/MapViewer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..4f6b86d980 --- /dev/null +++ b/MapViewer/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MapViewer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MapViewer")] +[assembly: AssemblyCopyright("Copyright © 2007")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3d06bcba-b9e2-412c-829c-a8458d883fee")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MixDecrypt/mix_decode.h b/MixDecrypt/mix_decode.h index 21eb18ec64..61129f35c4 100644 --- a/MixDecrypt/mix_decode.h +++ b/MixDecrypt/mix_decode.h @@ -50,7 +50,7 @@ static void init_bignum(bignum n, dword val, dword len) static void move_key_to_big(bignum n, char *key, dword klen, dword blen) { dword sign; - int i; + unsigned i; if (key[0] & 0x80) sign = 0xff; else sign = 0; @@ -154,7 +154,7 @@ static void mov_bignum(bignum dest, bignum src, dword len) memmove(dest, src, len*4); } -static void shr_bignum(bignum n, dword bits, long int len) +static void shr_bignum(bignum n, dword bits, unsigned long int len) { dword i, i2; diff --git a/OpenRa.sln b/OpenRa.sln index e3e91cdf7a..cb93fd91ef 100644 --- a/OpenRa.sln +++ b/OpenRa.sln @@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRa.FileFormats", "OpenR EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRa.Core", "OpenRa.Core\OpenRa.Core.csproj", "{1B60782F-B2DD-43F1-B51D-B798485F317C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MapViewer", "MapViewer\MapViewer.csproj", "{3942F56A-F427-4DE0-928A-89DEA952FF5F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -71,6 +73,16 @@ Global {1B60782F-B2DD-43F1-B51D-B798485F317C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1B60782F-B2DD-43F1-B51D-B798485F317C}.Release|Mixed Platforms.Build.0 = Release|Any CPU {1B60782F-B2DD-43F1-B51D-B798485F317C}.Release|Win32.ActiveCfg = Release|Any CPU + {3942F56A-F427-4DE0-928A-89DEA952FF5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3942F56A-F427-4DE0-928A-89DEA952FF5F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3942F56A-F427-4DE0-928A-89DEA952FF5F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3942F56A-F427-4DE0-928A-89DEA952FF5F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {3942F56A-F427-4DE0-928A-89DEA952FF5F}.Debug|Win32.ActiveCfg = Debug|Any CPU + {3942F56A-F427-4DE0-928A-89DEA952FF5F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3942F56A-F427-4DE0-928A-89DEA952FF5F}.Release|Any CPU.Build.0 = Release|Any CPU + {3942F56A-F427-4DE0-928A-89DEA952FF5F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3942F56A-F427-4DE0-928A-89DEA952FF5F}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {3942F56A-F427-4DE0-928A-89DEA952FF5F}.Release|Win32.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/scm12ea.ini b/scm12ea.ini new file mode 100644 index 0000000000..d427f7789f --- /dev/null +++ b/scm12ea.ini @@ -0,0 +1,310 @@ +[Basic] +Name=raraku (4-8) +Intro= +Brief= +Win= +Lose= +Action= +Player=Spain +Theme=No theme +CarryOverMoney=0 +ToCarryOver=no +ToInherit=no +TimerInherit=no +CivEvac=no +NewINIFormat=3 +CarryOverCap=0 +EndOfGame=no +NoSpyPlane=no +SkipScore=no +OneTimeOnly=no +SkipMapSelect=no +Official=yes +FillSilos=no +TruckCrate=no +Percent=0 + +[Spain] +TechLevel=12 + +[Greece] +TechLevel=12 + +[USSR] +TechLevel=12 + +[England] +TechLevel=12 + +[Ukraine] +TechLevel=12 + +[Germany] +TechLevel=12 + +[France] +TechLevel=12 + +[Turkey] +TechLevel=12 + +[GoodGuy] +TechLevel=12 + +[BadGuy] +TechLevel=12 + +[Neutral] +TechLevel=12 + +[Special] +TechLevel=12 + +[Map] +Theater=TEMPERATE +X=15 +Y=15 +Width=96 +Height=96 + +[Waypoints] +0=13082 +1=3160 +2=12506 +3=2970 +4=11327 +5=6843 +6=7837 +7=6632 +98=8127 +99=8127 + +[MapPack] +1=PwIAIIH//h0P/4WoAKgAiQACgYgAAhAQhYwAjACLAAKBpgACEBCCLAAQAoEBAAKBF0ACzw +2=wPg6AAoNBPD9F3D4VcAFwAWgACgQIAAoFHIALJgA+DowCjyiUPEJhQiP5YAP/JHg+BigAC +3=cQBQIjEC10gP72APgQHckw9QiDEA/l4A/4OfAJ8gYnB4zQ4RyUAQ0wgRgqEAEALh+hCDVg +4=BWIPwQAoFIAALPehFwiIFq/18AvxDLGBHXJRKCNQAQAoE4IAL9TBERAtuQEf5wAP/hYhJR +5=ANcoE4OiAKLimxKC+gAQAoH7AAKB/CAC/oIA/+ceE9skFN9mE4PWANIg/smQE4HIAAL+fg +6=D/gp0AEAL+ZAD/g9YA1tCLFIPEAMz4IxWBpP9BACMV/2gAHhWCswAQAoFQAAJUAIFCAAKD +7=///M/38AnxXnYhD/RABGFs+MFoGy+CEXg5MAk/+DAN0Wg5wAnOIhGIG0ACbPjBGCsgD3nh +8=f/RADaF4OeAJ763RjlHhaCtAAQAs+MEvmeGBkw/6gA3hiF///JAMnOixWB0wAC9yQa/0QA +9=2hn7vg/pHhaDyQDLzosagdX6nRr+RAD/+74Q7R4W8YwThTYANgA3AAL+kAD/HKLtHhvPjB +10=fLnR2Br86bHRD+MQD/hADGHBD0HJ4dmjEAz34QgTwAAhAMhUAAQAA/AAKBPQACUBTvjB1y +11=AP+AAMgdg4cAhyD0cQDTehAQ7IE+AALNeB4QCF/8EAKBQyACy14f0aAZhScAJwASIALzEh +12=+AbgQAIIH//kcA/4aHAIcAjADbKgCFVgBWADwAAoE+AAKDQAACQAKBASAUgT0AAoFaAAxQ +13=FoFDIALLXgCDsgCyzJ0AgicAEAKBEiAC/qQA/4FWyI0A3XgBgVcAAhEa/8wAogCDKwAr7n +14=EBEi6BQQACgfcgAoMKAA4AAjBOgwUANAACgwEAFSAC/lQA/4OlAKX/TQDJAhEAgSvobwHV +15=ngIRAoIFAP+4ALwC53ACyZwEMQCBAUEAEP6DBQAzAAL/WgDEA4X//58An/9PAMcE024DgQ +16=FAElAI0ZQFgfggAhAKUQAQ/tnABIGo/0EAIQXpHgWDAwA7AAKBPwACy54BzWEGgiwAEAIw +17=7ueABIMBAPkgAlAQgQVgGDEAgY4AAv9SAMwFg6YApuLdBoIDABACyUwGgV0AAt9aBuV8B4 +18=EwAAIxAIEyAALJmgeBFCACgv//UQCCawAwAoX//50Anf9DAN0GyRIIg6QApAQQyyAEgzYA +19=NiD8EAJSwv9gAFQHUyxxAIPlAOgAAv9SAMwHyx0JzywIEP4xAM18BoFEAALVFAmDUABQ3H +20=cGybQIEAKBLgACNQAV8s+0B3EAcAGD6gDq/08A3QiDowCjAxDLHggxAM+ECeFYCed6CtOm +21=CYEXQAIQVIOUAJT/ZwDLCeNoCtGYAFABhVsAWwBK9HkEcBDJvAoRAM1kC4OnAKf/YQDJAf +22=k+C4NKAEwAAoFZAALPignRlAzLqgaBAcq7C9HFDP9iANoLglEAEALPiAwwCoFIAALZIA3T +23=egzTjg2DTgBPQQCBSQACUDSBQgAC/l4A/9seBMs8Dc1IDt1aDTABglUAEALXiAyBWAACgU +24=7/lwClDRLI04ANgwEAOCAC7V4Oz4wPUQAQLIOxALEgCDA0gUcgAv5eAP+CoQAQAu0kD4Ei +25=AALjWg/dfA/Jug9Q/v+KALIPEAGDUwBTzkcQMQDl9hDvghAxeoFeAAL+YgD/3R4GUQCDAQ +26=AhIAIw/tsiCNNkDM+ODsu6EP+UAKoRdQIw/jEA3SAI1WQMgUsAAslAEMucEoKzABAC/m4A +27=/xtEydwIzWATMQBQ/IEh0K8T0SwK1WQNyYwTgQEE9M26Ev+SAKwTEbqBT+BDFOf0FBBSgU +28=0AAhX0zZwUgbT/cQDJAc1kFM1gFN8+Fe1fFsmQFcuCFoK0ABAC/m4A/81kFe1gFf5OAP/N +29=rgH+6AD/gZpDdM+sAd0oB/6AAP+BQMB3ANlYCN1aExAagZoAAu+mGMNGCP58AP+DXABcAP +30=7/RgBgGYGeAALLqBLZtxqBBMZDCP58AP8xAIEB2lcM3VoUEBqBiAACEQDnrBoxABdG/nwA +31=/4NSAFLeUwzdKBdRABEe16obEmbBpgMQ+jACxUYJ/nAA/xH0xVQGUQCBAdCZAel1HTEAza +32=oaEGrBiADDdADLxhx7Sv5wAP9RABCWgVrGiwBRAN9iGtuNHoPDAMNgQMu4HTFoMP7JkBL+ +33=cAD/EfRxAMmGBVEA414ayZUfgrUAMAIQ/nEAwWwA34QN34AfgKcEACCB//5HAP+CrwAQBo +34=VSAFIAAsxRAIEeAAIwCoFXAAKBQAACgV0AAuMiAIWuAK4AtUACgcMAAsmSAIFWzlEAz8oA +35=/moA/zEAglYAyboAgTAAAhD+gx4AMgACUQCDAQBIAAJQOIWkAKQApQAC14gAEAgRAMmSAY +36=MFADQAAv9iALwA14QBzTcCg8AAwEECgQHWUwFQAud0AdOdAoIFAP92ALYBg44AjtbdAhEA +37=g8AA+iACgfsgAoH8IAKBuCAyz04Dg///wiAahaMAowCmAALf/AITOoFBAAIQ/oEF4LsC/0 +38=QA2gKDngCe2iEDhYwAjACNAALZRgODuADk0E0EgcIgAlEAgWnc3QODXABcJDpRAOO4A/9Q +39=ANwDgo8AEAIQCoWoAKgAigACcQAwAdFmA9NKBVEA438FMQAQ0oEB0rMEM3Rzev9IANYEg5 +40=8An9whBcsQBoIkABACUH6BLgACgQggAsu4AoFCAAKF//+xALHm3QWCVQAQAuW2BP9YANQF +41=Mq4Q+NGEAzD8MP6BASGM01wGgQEhAOl6Bv96AKQGzTYHcQDPDAgw/s3GBTEAyVQIgUcgAu +42=t4B4X//1MAU9K3Bf9gAMAH5/QIy04G11YJ93II4boIy6wJ/moA/8lKCNtSCoFGAAIQMoGy +43=5CED2aAHMHCDTgBMAAKBSwACgVkAAv90ANIJgQTktwLLbgpxAtOGCoOcAJxgFjEAyU4KgV +44=gAAhD4gU7/WwDDCoEM4t0LggQA6UYLgUQAAst2C4KTABACzzIMgqEAEAJQDoVbAFsASsi1 +45=Csm6C9WgCv9CAN4LyR4MO+QQAYEDRNgQ+jAC4U4Ky2wMgbRgTumEDIFKIPSBTQACgV4AAt +46=eYCjCQ/0QA3gxxBDEAggMAEALLOA3lSA0RtDC4grQAEAIwWIORAJHU3Q2DoACgzIcO27AN +47=MSZzBv3eDRBEMQKDCgD3IAIw/ss2Dt+8Cc9mDsl4BumEDt2vD/9kANAOcNznSA0wAoFFAA +48=IwWsl4CXpY24wN46sQglEAEAL/SgDYD4EBIQCBAWEAzz4Q1TIRz0QR/7QAbhBQAoH4IALv +49=rAfNaAnPchGF//+UAJTU3RGDogCi2N0R0YACyU4A/4QA3hE3noFKAg7JbBKCswAQAnEA1w +50=QT/6IAohKDAQAjAAKBSQACdHoU6hWmWJ4Wusu6Dsl6E/WFFM+AA8nSEf9CANwTyVwRgfkg +51=AtEwFBD+cQAwNMlYFFa6y2wUga3/QwDdCjEA1cYR/0gA3BOBISACMQCBGgACyTgVgSIAAh +52=D+y8oPyWwT02EWgq0A1XoVwaYFx3QAgmsAMALl9hWDVABU/0sA0wxw/skoFoMaAB0gAhD8 +53=9UAW24wF/4gAlhZQ/IEhIEoxss0yF4T//2wAEALJyA/Tug7nqg/VVhjBPgWBiwACyUIFy4 +54=gXgVoAAv9KANQNyR4YcrLJNBgQEN1EGOuAAtGSGFD44a4Y/0wA0gvLHhj1KxrxgAJwAcE2 +55=BnEA64wK/oYA/+eAA9eOGvOCB/6GAP/PvhXpdRzboBLZwhf/iADcG/1jHf+sAKQc4WQa+2 +56=Qa47gR/0gA2B3tdB77UB7rcAD/RAC8HoA+AgAggf/cAACFpACkAKUAAt0AAFABhaMAowCm +57=AALrNACFQABAAD0AAhAIgV0AAuUoADABhVwAXAA+AAKBWgACgwEAAsjRAOuWAM8LAYKTAB +58=ACgZ8AAusoAOkyARC+cQCDAQBEAAL1lgDJ0gD/dgDaAO8QADEAcbjvkgGDUwBTIDrL0AD/ +59=RADaAYWqAKoAnSAC/1gAKAKCUQAQAsnSAoFDIALxmALPygP/ggDeAt1QANWAA+mOAINSAF +60=L/VwDHA4OoAKjeUwD7MgHPxAODAQBXAAL/jACYBP5KAP+DAwAMQE6CbAAQAtPCAzEAgQHm +61=kQOFWwBbAErQywL/QgDcBYKhABAC4/gGg44AjtojB4IDABACgQxBAlEAg1YAVtTHBeeQAz +62=EAg0oAWQAC/04A0AD/RgAeB4M2ADYg/FEAUQQwAdeCBzMKgTwAAlgkgUEAAoEJIAKBOwAC +63=y5wFMQD/TgDQBoX//54AnuTdCIORAJHSIwkQ/jEAUJYxAjDIgTQAAtWECDMKEQBZHNmuCN +64=F+Bv5CAP//QgAgCVIAcprVdAnPygaBAQACcQAwIDA4UR4Y+BAeECYRAP9OANAH5yIEgZoH +65=KoGq0iMLgiQAEALLhApxANeECd+YC828ChsAy4gK/2QA3goY4oGaAALRSgsw/IEkyNML0c +66=oG6YIM03AMMiZb/v9KANQLhacApwCXAAKBmAAC1WQDUQDfTgv/cgBqDf9kAN4Mgo8AEALT +67=CA7XXg3Nzgz/UgB0DP9GANoJ/t8Q/4H/gAMEACCBAP6PBwCBASACyI4HgQIQBIIDBMmGB9 +68=Z9BxAtYA9wROjjB4ICAxACEHIAAhARgwUGBwADgQjJBQjT/AcABIMDBAVwRsgVCOtkB4MA +69=BAXIpQeGCQoLCgsMyoQI0V8IQQBgEMqTCOrkB863CIECy7EIYOXKOQkhN9IxCO1hCM2zCI +70=IEBc3aCNHgBxCm07EI6+AJzzEJgwcIBs0ACs+2CQA3ggMEEDzs4Afgfgni7AgCooIGBwAF +71=EQb/TwDSCeNtClKA3EwJ35EK8dAKEu3jSAnekAvyzAsAE+NHC+DaCN3uC9CQChG0UQDcEA +72=v/QQDuC9MPCyN7QAX78wvd7QzSkAoleiOA/0EATAncbgvVDwtTgNQyC/5IAADX3gfNxwjI +73=Jg7yDwvStw7IXQjJ1gcACs3GC3CJERnQTQ7tFgsgXnM+yFUIIArNxgfXFwny2w3PbQyBAT +74=dhEHUkfiCScWphCv9IAN8Ozs8OM3XKwQ/IyA5gcyKZ/0EAZA/Vkg9QhMlDEWGJEIo0FunP +75=DeRjDoIEBQeW0LwQNgsBcxeTIZsZwvnlCNMgEoEICZhg7M65DxFzMXqCBAUAKuxkCOKSEo +76=MNDg9qrjC2U6OCAwEQkIYAAQoLCQoAgoMMDQ765AgybtDJDoIBAhAtc3thABAWEByBAQq3 +77=hQEAEBEScDrybgsBwWBdy5gTyT8RcIYpjzP5IZtBHzCu5PANYO6CAQIR61uXyQMUyDgSy0 +78=UTKY8ACyBxI/4gPgCv5toIZUwAP4IMDRBH0CYTOHDIwRNAEGePQIvIYhHmYw5gbIMHCBAx +79=S87JCxT2yMQRIXhACieKIos1O1B35mMRdmpQWtDID8m9FMtDEhOAEB5NunA27mMOQFowXc +80=tiEMy9EXANIDIgHsyjCOdsFcvXDyJLSmXLlhPKvxRQC4EBKKfVxw7qcRMRyVDVM1zVMwvJ +81=xRMRgOXGC9wAE3NZI07SsQxiiUgmE3EQKfLgD8veF8vFE9NtFHMeYqMgKfJfEM9dGGDWCm +82=HUexhApHKjRvLw3RbO7BUgXABWZsfP3BhqAGOiMCzySgnOjxcDShWCFQbTVxnJHhhRP/fj +83=D1A6QOclgIMODxDbow5DiHAc9mMQUMFg54cBABITFBUW0I0V0DYNYRz3Yw5QOkDLAtWFGB +84=kaGxzi/hVg9vdiEFDd8F0I/ogAANlLDP9CAE0J0DEayrAcMgXTVhvq4hHYIxHUiBRNKyZ7 +85=0JkbgQQpSf9CAOcPzlYdy8McNAfRJRIEQ/1jDhrezdYcypcbWIDMIh4UwIIOEPBsFsu6HT +86=Fr29wYF7LJKRkhs4EPG4bz2xjMvBltdeDzGV+2ggEAFMLUKhflgR436CFDZvLVGR1mBzAC +87=S5bSuB+AmgQAIIEA4wAAhAIDAAEwAoMBAgAQB4ICAwAT0DwAhwEEBQYHBgcwDQAkICiBAS +88=AF1TgA3oIAgQEQBCBLAEqCBAUgT4EEMBcgjMscAIMACgtADFCzEH0gBcrCANeOANH/AABY +89=IEqFBgcIAgNQViBx1W0AggQFUP4QLORoAFAiyhABIPQAziADIQxQA86+AGCxgQEAqcncAF +90=HC4/AAcKkQNABLAIMwAwAaYAwQmBGVzgACEOqCCQoBgQACUfvsaQEQVsg1AACDMAPJpAIw +91=D9B+AoEEADuBDCB7UPtBBeXuARDaIEACZ1ARYcxBVTAF0vwCgQIw9DDCEFMgfulrAkG7QA +92=GCBwgBTjBHQIkAKBAM0noDMi8QcRAoEHdAj+jsADNuUAGDDQ4PEJoQQxIMQJ6BAlPn0UMC +93=yV8DQn7iawPSegSDExQVUsoxdwBKAOYBFdZ6AyJwYHdAC+DtA9EPBYMYGRpSTUDGypgDz+ +94=0EMXpAgkOF92kAEs5QQ1RPMExUg8wGBCK+U/IwLGC27+8FgggJYENgxkEAEGhDrGD6QIdB +95=dANCICQQGeFrBYIFBsjJAwA1hQoLDA0OVOVUy2EAcO7IzANVlco2BTS63+0FEHAxRwbHAD +96=WEDxAREkMOYdRgXEBuyu4GUA1TpsnNAQa53+8DgxESExEuA/KBCwNsgxQVFmNEc09yjczA +97=BcvBB8vIBDHA3nADgxYXGBdlEQdAc0C7J8jILwcRVclKBspJBtJCBOJsB4MAHB0V4oEQE8 +98=NTxXXIM09BWjSAycIGy8EIzcYD4uwHZd7J5QVieiEINN6CAABUgNJDB8hiB2AK4G0FVNxg +99=iSJ7YnoxAGJ6IW3LUQjLbglyhEDN4vAIKDzIXAEwiXCQUEnW0AjQVgkxU+EFAEa7UQBXez +100=B6IHMjzNUNAc2ECsnhBuG9CkjZZTkyZkIW04IDyVsK1WwK42kHggIDQ/kwgxtNImZCFt12 +101=ChGT0zwE5OgHBW6BDwN7ACgggxh4ddTb7gvLKgzLNgVAD99tCoESB+uBFjAoEQYUhsnOBt +102=glDMhbB8iyB8jYCjTI3wUFghsc4HMK3XUJzb0DOBL0bQDaOwzRwwLTwgP26wTU0Qrp+QDO +103=1Qz+WgAA0m4OzjMF/0MAgg3p7A7nZw3UOw/Paw/PWwfYuA7m5w3Waw/YKQ/caAVT/OJrD0 +104=7W4CEOUBJTcNXuD2q64esPSijodg9AfNhsCnD+4W0Q2E8I0gwQWKvWkRHJ1Qbg7gnbqwvO +105=LxFoq1Jj034RMP/jbRHrFQ56ENRGEFiw4uoQ3TIOy8oOTNVblRIJ0BETAHVJxONtEN8/Dg +106=fkHSlN6MguBtEREuriEtMREsptEzycTSnEWwB0A22qXDlNDVs59u8AyAcUAHoAWh0pyjED +107=cQlrRHgTUCLmbwPWBBUcnBBaDSnJsANR4BATEgnI2QHJngjxcBPK7BRjaIMBHB3KWRXLyB +108=UyD8vjBfPsE8rLEsKlA8fkBMnfBctIFsnhER16UBLhcBLK7BXGXwbGIATJzxXGKADUwhUQ +109=AsrQFuDxD8xrFsqQFQqfyk4WYDHXRhfKPxf+kAgAgQCA + +[TERRAIN] +2233=TC04 +2877=TC05 +3255=TC03 +2113=TC02 +2366=T17 +1843=TC04 +3780=TC03 +3770=TC01 +4914=TC05 +3885=TC02 +2145=TC05 +2016=TC04 +3168=TC03 +3866=TC05 +3599=TC04 +3728=TC05 +4121=TC03 +11799=TC04 +11928=TC05 +11616=TC03 +9824=TC05 +9942=TC01 +10330=T16 +11045=TC02 +7248=T17 +8524=TC02 +7864=TC04 +7604=TC05 +6302=TC03 +8857=TC02 +9250=T16 +6954=TC03 +10185=MINE +4401=MINE +2921=MINE +10341=MINE +13739=MINE +6040=MINE +11604=TC01 +11731=T16 +12946=TC02 +13713=TC01 +12175=T16 +2065=TC04 +3626=TC01 +4047=TC05 +2029=TC03 +2027=TC02 +4329=TC02 +4200=TC02 +10925=TC04 +12491=TC05 +12748=T16 +11480=TC01 +11683=TC02 +4007=TC01 +7566=TC03 +7311=TC02 +1813=TC01 +8010=MINE +2731=MINE +13988=TC02 +5741=TC01 +4962=TC02 +8904=TC03 +1881=TC01 +6097=TC04 +12132=TC01 +11110=TC02 +7001=TC05 +6873=TC01 + +[Base] +Player=USSR +Count=0 + +[OverlayPack] +1=LQMAIIH//qcH/4IIBuODB4UHCAYHBf5UAP+GBf8G/wf/AAVAAYELAAKE/wr/CcsbCIUHCA +2=UFBgAn/kEA/87UBwCAggcFUQaCDAoQeIIJCSB/gQoAiVB/ggYIAKKBCNHTB4EI538HhAgH +3=BwjL6QiEBwcHBQBbgQdg2oEMEAWBChEGAILIQAgwIYIHBsypB4MG/wUAPgAG3/EIhAcHBg +4=XQqQcA/4IFBwCbUX4AfIb/Cwv/CgoBDODwCBCBARvhVAiBBQBozoEJgQYAPBF/cQIRfoMK +5=CQwiB91yCYH/AT0QwQEF4PAJzBcJQtiCBQUS3XASEP2FCwkM/wnfwwkBUIEFAdMBw+LvCd +6=FuChIUgwUHBnCBEPYQBOHDCRKXAX0CQeLECdS6BwB9ggUGyBILAYBAhN7zCBOXAz7i1AfS +7=kQsCOQFBya4LIwUgfeJCCiA/5+kI0tELzGwJI/vjvguB/wK7FBv77AzLFAoQfyQG4oYMAr +8=2BBuSoB+SRDUJ5zEAI13oJFRj+RwD/7VQIAbcQ+/9BAOoM66EH4IYI8bkOBgv/SABrDtB7 +9=D9/ADRLL/1oANQ8CV9g9DYEI/18AMA8BAIEL148PB9YVhOJsCfbWEIEMBljY+ggYYM5VCf +10=5NAP81VdOfDgH5gQUGoOJtCv2ADdNSCyYGBE3+dQD/J8cUfghN/nUA/4EFEX8jCP93ALYS +11=VMT/dwA1EiOE/jAB//W0ERtz/kMA/wn772oVGq2BBto0EeUvFAQy77AVLW4YtNkTEePiFQ +12=BM7GEWAbAA/R7I3vQI4OwK0pMJ3UIXENzgMxIPkd+bF4EI7+sNBeQF5c0WCdH/CoEF3TQR +13=BSnwnRURfAjn4GIYgQjcnBgM+/FnFQDaDjDibgr/UwAwFBbiD+zNQRnTkhH/VgBBGdJ9Ee +14=c7Df5SAP+BCQ/xggoL/3oALhoZF4EM48AN/lUA/8HBCsjDCP5yAP+BDMG+CdqtG/9dADAU +15=gQsB/NkuHCOt/10AthPaLBsELckrCf5xAP8XrQcT/3gAthOBBsDpCwua3b8Y/loA/4EHBu +16=kNGf93AE4eEHsJrwbs/3UAzh0Q+RizwU8I7ZQfgPACACCB//5GAP+IB/8GBQcHBgX+TQD/ +17=gQfpcQCCBwgABhAE/kUA/4EIAE8Af4QI/wYG4s4AAH+BB+mcAN/2AIUIBggG/wCGgQjiTg +18=CCBv8ALv5MAP+FBwUGBgUw++RLAf9NAEsB/gcB/yKD/noA/wB8/3IASgIAciLzEAiCBgbo +19=IASBBf9GAE4AE/GBBQB+BAMRfIEH4cwEAKf/SADHARB5EFID/4EFFAbmawVDrv5DAP8AdA +20=FMgQYAAgAG4qAEgwUIBQAv1MsFFhzr5gWBBSED6WoGgQYFfgWt0QwEAMwQHOzxA+rpBoEF +21=Bf4VrzK5zj4CgQb/UABMAM4PByDjgQfQnwUGQQEbgQjiIQXt5ATI5weBBQIwAy5ggAI4Br +22=0QpAZFAIQQoP5PAP/J5gcBYIMIBgcDAUAUA78AcTRJABgAHgKf/k8A/8pmBwDlgQUAhVgD +23=gQcTQBREQYQAgP9QAOcHAvLJrQkUNQBlMOYTugAQUPMAFgEf/lAA/82hARBhAOhBf8nKBA +24=Ed/0wAaAgxWNxlCsi5CgEJFB7+SgD/GZfe5whluoEGEZr+TgD/Atvo5ggBjP9RAOgJ6coF +25=/1EA5Qv+YQD//3sAoQMVsNaWBoYK/wz//wv+XgD/F8gFvNIWDhB7AIIQif5YAP8DrQdL13 +26=UOhAn/Cgz/WwA0DiTX1xQNigsJ/wwKCgwJCQz/XAC0DhdK1hUPgQoAgYEK/2AAsQ3W+w+B +27=DAGBgwkKCf9gALUP1OYKggoJIf0Bhf5fAP/UFBCBCTJ7AQH+XwD/1RUR/mcA//9MAGgJ1R +28=QO5h0JyNAKHJTvGQD/QgAHCsIcARpQ7WcJCCrZkw7VtQTRlhAIT4EGG2Xr6BGBCPBgEgDs +29=zy4TAUkK4hWe7+kB7OcK0+UHCUXAGgLw3xMGzuwwFNETDsEaAivH/1QAZwfOgA3QrxQA/C +30=1N/mQA/9ATFYEHHkaBCO2WBvfbEc06Cg3fgQbDGAH+ZgD/zK4WAXwBfgt2/tAI/4H/gA== + +[Briefing] +1=Rescue Einstein from the Headquarters inside this Soviet complex. Once +2=found, evacuate him via the helicopter at the signal flare. Einstein and +3=Tanya must be kept alive at all costs. Beware the Soviet's Tesla Coils. +4=Direct Tanya to destroy the westmost power plants to take them off-line. + +[Digest] +1=rIUB8img/I/4iMT7A6ldptR3TcQ= +