diff --git a/.gitignore b/.gitignore index bd5208bcde..ed74130130 100644 --- a/.gitignore +++ b/.gitignore @@ -54,4 +54,8 @@ OpenRA.Launcher.Mac/OpenRA.xcodeproj/*.mode1v3 # KDE crap *.kate-swp -*.directory \ No newline at end of file +*.directory + +# auto-generated documentation +DOCUMENTATION.md +*.html \ No newline at end of file diff --git a/Makefile b/Makefile index e72cbb7ec7..0a5ff9610e 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ PHONY = core tools package all mods clean distclean .SUFFIXES: core: game renderers mods utility tsbuild tools: editor ralint tsbuild -package: core editor +package: core editor docs mods: mod_ra mod_cnc mod_d2k all: core tools clean: @@ -205,6 +205,10 @@ INSTALL = install INSTALL_PROGRAM = $(INSTALL) CORE = fileformats rcg rgl rsdl rnull game editor utility tsbuild +# Documentation (d2k depends on all mod libraries) +docs: + @mono --debug OpenRA.Utility.exe --docs d2k > DOCUMENTATION.md + install: all @-echo "Installing OpenRA to $(INSTALL_DIR)" @$(INSTALL_PROGRAM) -d $(INSTALL_DIR) diff --git a/OpenRA.Utility/Command.cs b/OpenRA.Utility/Command.cs index 96bf9a38ab..e5977e8f6f 100644 --- a/OpenRA.Utility/Command.cs +++ b/OpenRA.Utility/Command.cs @@ -491,28 +491,37 @@ namespace OpenRA.Utility FileSystem.LoadFromManifest(Game.modData.Manifest); Rules.LoadRules(Game.modData.Manifest, new Map()); - foreach( var t in Game.modData.ObjectCreator.GetTypesImplementing() ) + Console.WriteLine("## Documentation"); + Console.WriteLine("This documentation is aimed at modders and contributers of OpenRA. Please do not edit it directly, but add new `[Desc(\"String\")]` tags to the source code. This file has been automatically generated on {0}.\n", DateTime.Now); + Console.WriteLine("```yaml\n\n"); + + foreach(var t in Game.modData.ObjectCreator.GetTypesImplementing()) { if (t.ContainsGenericParameters || t.IsAbstract) continue; // skip helpers like TraitInfo var traitName = t.Name.Replace("Info",""); var traitDesc = t.GetCustomAttributes(false).Select(a => a.Description).FirstOrDefault(); + if (string.IsNullOrEmpty(traitDesc)) + traitDesc = "Trait documentation is missing."; - Console.WriteLine("{0}:", traitName); + Console.WriteLine("\t{0}: # {1}", traitName, traitDesc); var liveTraitInfo = Game.modData.ObjectCreator.CreateBasic(t); foreach(var f in t.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy)) { var fieldDesc = f.GetCustomAttributes(true).Select(a => a.Description).FirstOrDefault(); + if (string.IsNullOrEmpty(fieldDesc)) + fieldDesc = "No description provided."; var fieldType = NiceTypeName(f.FieldType); var defaultValue = FieldSaver.SaveField(liveTraitInfo, f.Name).Value.Value; if (string.IsNullOrEmpty(defaultValue)) - defaultValue = "(none)"; + defaultValue = ""; - Console.WriteLine("\t{0}: {2} # type: {1}", f.Name, fieldType, defaultValue); + Console.WriteLine("\t\t{0}: {2} # Type: {1}, {3}", f.Name, fieldType, defaultValue, fieldDesc); } } + Console.WriteLine("\n```"); } } } diff --git a/OpenRA.Utility/Program.cs b/OpenRA.Utility/Program.cs index f227ca8b97..81846bbd64 100644 --- a/OpenRA.Utility/Program.cs +++ b/OpenRA.Utility/Program.cs @@ -64,6 +64,7 @@ namespace OpenRA.Utility Console.WriteLine(" --remap SRCMOD:PAL DESTMOD:PAL SRCSHP DESTSHP Remap SHPs to another palette"); Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--infrantry] [--vehicle] [--projectile] [--building] [--wall] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally removing the shadow."); Console.WriteLine(" --transpose SRCSHP DESTSHP START N M [START N M ...] Transpose the N*M block of frames starting at START."); + Console.WriteLine(" --docs MOD Generate trait documentation in MarkDown format."); } static string GetNamedArg(string[] args, string arg) diff --git a/artsrc/d2k/OrthodoxHerbertarian.ttf b/artsrc/d2k/OrthodoxHerbertarian.ttf deleted file mode 100644 index 47d3dc49b5..0000000000 Binary files a/artsrc/d2k/OrthodoxHerbertarian.ttf and /dev/null differ diff --git a/doc/RACG110.TXT b/doc/RACG110.TXT deleted file mode 100755 index 68256c75aa..0000000000 --- a/doc/RACG110.TXT +++ /dev/null @@ -1,5179 +0,0 @@ - - The Red Alert - Single Player Mission Creation Guide - - Release 1.1 - May 28, 1997 - - Copyright 1997 Andrew Griffin and C. F. Harkins - All Rights Reserved - andrewg@light.iinet.net.au - cfhark@msn.com - - - -DISCLAIMER - The purpose of this guide is to aid the public with the creation of -single player missions for the game Command and Conquer: Red Alert, by -Westwood Studios Inc. - - The authors claim no responsibility regarding any illegal activity -concerning this guide, or indirectly related to this guide. - - Future updates and add-ons may render parts of this guide obsolete. - - -TRADEMARK INFORMATION -Command and Conquer: Red Alert is a trademark of Westwood Studios, Inc., -and is so acknowledged. Any trademarks not directly mentioned are also -acknowledged. - - -COPYRIGHT NOTICE -This article is Copyright 1997 by Andrew Griffin and C.F.Harkins. -All rights reserved. You are granted the following rights: - -I. To make copies of this work in original form, provided: - (a) the copies are exact and complete; - (b) the copies include the copyright notice and these paragraphs in - their entirety; - (c) the copies give obvious credit to the authors, Andrew Griffin - and C.F. Harkins; - (d) the copies are in electronic form. -II. To distribute this work, or copies made under the provisions above, - provided: - (a) this is the original work and not a derivative form; - (b) you do not charge a fee for copying or for distribution; - (c) you ensure that the distributed form includes the copyright - notice, this paragraph, the disclaimer of warranty in - their entirety and credit to the authors; - (d) the distributed form is not in an electronic magazine or - within computer software (prior explicit permission may be - obtained from Andrew Griffin or C.F. Harkins); - (e) the distributed form is the newest version of the article to - the best of the knowledge of the distributor; - (f) the distributed form is electronic. - - This document is for reading, not taking. You may not distribute this -work by any non-electronic media, including but not limited to books, -newsletters, magazines, manuals, catalogues, and speech. You may not -distribute this work in electronic magazines or within computer software -without prior written explicit permission. These rights are temporary -and revocable upon written, oral, or other notice by Andrew Griffin or -C.F. Harkins. - - To report a suspected copyright violation, or to request additional -rights beyond those granted above, write to the either of the authors at -"andrewg@light.iinet.net.au" or "cfhark@msn.com" on the Internet. - - - -Table of Contents - -CHAPTER [1] Introduction - [1-1] Foreword and Introduction - [1-2] What this guide is NOT - [1-3] Getting the guide - [1-3-1] Usenet - [1-3-2] WWW - [1-3-3] BBS - [1-4] Contributing to the guide - [1-5] Acknowledgements - [1-6] Accuracy of Information - - --SECTION ONE- GENERAL OVERVIEW - -CHAPTER [2] Notes Before You Start - [2-1] Negative numbers - what's the deal? - [2-2] Determining where things go - [2-3] .ini and .mpr files - [2-4] A warning about Red Alert's parser - [2-5] Placing walls around the map - [2-5-1] Fences1.mpr file - -CHAPTER [3] Glossary - [3-1] Terms used in this document - - --SECTION TWO- SPECIFIC INFORMATION - -CHAPTER [4] Mission File Components - [4-1] [Basic] Section - [4-2] [Map] Section - [4-3] Country Specific Information - [4-4] [STRUCTURES] Section - [4-5] [SHIPS] Section - [4-6] [INFANTRY] Section - [4-7] [UNITS] Section - [4-8] [TERRAIN] Section - [4-9] [SMUDGE] Section - [4-10] [Base] Section - [4-11] [Waypoints] Section - [4-12] [CellTriggers] Section - [4-13] [Trigs] Section - [4-13-1] Trigger Information - [4-13-2] Available Trigger Events - [4-13-3] Available Trigger Actions - [4-14] [TeamTypes] Section - [4-14-1] Available TeamType Actions - [4-15] [MapPack] Section - [4-16] [OverlayPack] Section - [4-17] [Digest] Section - [4-18] [Briefing] Section - [4-19] [Overlay] Section - -CHAPTER [5] Tables - [5-1] Available Red Alert Movies - [5-2] Available Red Alert Songs - [5-3] Available Red Alert Speeches - [5-4] Available Red Alert Sound Effects - [5-5] Available Red Alert Countries - [5-6] Available Red Alert Buildings - [5-7] Available Red Alert Infantry Units - [5-8] Available Red Alert Vehicles - [5-9] Available Red Alert Aircraft - [5-10] Available Red Alert Ships - [5-11] Available Unit Formations - [5-12] Available Red Alert Special Weapons - [5-13] Available Initial Unit Commands - [5-14] Available Terrain Types - [5-15] Available Smudge Types - [5-16] Available Target Types - -CHAPTER [6] Miscellaneous - [6-1] Tutorial.ini - [6-2] Mission.ini - [6-3] Red Alert Mission Tree - [6-3-1] Allied Missions - [6-3-2] Soviet Missions - [6-3-3] Ant Missions - - --SECTION THREE- THEORY - -CHAPTER [7] From The Lectern - [7-1] Contributing to the Lectern - [7-2] How to get units appearing out of buildings - [7-3] Changing Red Alert Values - [7-4] How to control where reinforcements come from - [7-5] How to get units to enter buildings - [7-6] Discussion on IQ Levels - [7-7] On the use of Badger Bombers - [7-8] The Global Mission Timer - [7-9] What is the Zone of a cell? - [7-10] Explaining Global Variables - [7-11] When a Building Must Be Captured, Not Destroyed - [7-12] Using your own names - [7-13] Blowing up bridges - [7-14] Advanced Editing: Just how extensible is Red Alert? - [7-15] Remote detonation - the cell of death - [7-16] Getting units to destroy bridges via teamtypes - - --SECTION FOUR- APPENDICES - -CHAPTER [8] Items To Fill - -CHAPTER [9] Internet Resources - [9-1] Third Party Programs - [9-2] WWW Pages - -CHAPTER [10] Revision History - -End Contents - - - - -------------------------- -CHAPTER [1] Introduction -------------------------- - -[1-1] Foreword and Introduction -================================ - This document represents a significant investment of time by the two - authors, the purpose of which is to see the creation of new single player - missions for the game Red Alert. Just as there were hundreds of single - player missions created for the original Command and Conquer, we hope - that the same will be true for Red Alert. - - It is a sad fact that this guide has to be created by someone other - than the company that created Red Alert, but for whatever reasons they - had, Westwood Studios decided to supply a terrain editor that could - create new multiplayer missions, but could not create new single player - missions. In order to create a new single player mission, you will use - the terrain editor to create the map, but will also be using a text - editor to do everything else. - That being said, my co-author has this to say (which I agree with, a - least to a limited extent): - I don't have a quarrel with Westwood's policy here. Their bread and - butter is making and selling maps and scenarios. After the host of bad - C&C missions that were made by independents, they should naturally be - cautious about giving the means to make RA scenarios to all and every. - Gresham's Law applies here. They did give us the Rules.ini file, - and they didn't have to do that. - - There you have what are essentially the two sides to the story: if - Westwood released their information, then the good mission makers would - be able to create better missions. The flipside to this is that there - would be a lot more poor missions, making it that much harder to sift - through the dross. - - The more discerning reader will notice that there are gaps in our - knowledge throughout some sections in this guide. We have made a - significant effort to work out these sections, but there is only so much - that two brains can accomplish in a finite amount of time. If you work - out what one of the missing sections pertains to, or have further - information on something that we have already commented on, then please - get in contact so that we can make this document as accurate as - possible. If you do make a submission, we ask that you test it - thoroughly. - - Making single player missions for Red Alert is not easy, even if you - have some previous experience with creating new missions for Command and - Conquer. This is mainly through the increased complexity of the - triggers that you now have access to, which enable some quite - intricate activities. Yes, you can create a mission using just the - simplistic forms of triggers, but it is the opinion of this author that - this is akin to buying a car to drive up and down the driveway. - However, we do recommend that you start off by learning the basics. - Start with a blank map and just experiment until you begin to get the - feel of the way the Red Alert triggers operate. - - We wish you the very best in your efforts. - - And, yes, we know the title is a bit of a mouthful, but what else - could this be called? And I also know that my typing style tends to the - verbose, but in this case I do not see that as a problem. An effort has - been made to keep all lines to 74 characters or less, but in the case - where I have included sections from an external file, this may not be - possible. - - -[1-2] What this guide is NOT -============================= - This guide is not meant to tell you what makes a good mission; that - changes from person to person. If I start to preach about what I - feel makes a good mission, I trust you to forgive my lapse. - - This guide is also not meant to make everyone into a mission making - guru. If you were good at creating single player missions for Command - and Conquer, then you are already a step ahead, as many of the actions - you must perform are the same. If you have never made a mission before - all I can say is: give it a try, you may be great at it. - - This guide will also not tell you that I think story is the most - important part of any mission. Again, the two authors differ in what we - see making a good mission. To quote cfh: "I'm just a nuts-n-bolts - kill-em-all type. Plot be damned." - - This guide will not become a 'how do I edit the rules.ini file?' - guide. It will address single player mission creation only. - - This guide is not meant to encourage you to email us. My email policy - is based on mass recycling (which means that I delete those emails that - I have no intention of replying to). Do not contact the authors if you - want to ask how to do something with a trigger or teamtype, for you are - likely to end up on the trash heap. - - Just one final note: do NOT send Andrew any of your faulty missions. - He is a grumpy fellow, and will not debug them for you. - - -[1-3] Getting the guide -======================== - This guide will NOT be sent out by the authors via email, so don't - even bother to ask. - -[1-3-1] Usenet ---------------- - A pointer to the Red Alert Single Player Mission Creation Guide will - be posted irregularly on the following newsgroups: - (1) alt.games.command-n-conq - (2) comp.sys.ibm.pc.games.strategic - Just how often this is posted depends mainly upon when new versions - are created, and also how lazy I feel. (I do not get the Red Alert - newsgroups on my news server, so can only post to them if I use - dejanews). - -[1-3-2] WWW ------------- - New releases of this Guide will be found at the following World-wide - Web site: - - http://www.geocities.com/TimesSquare/5458/ - -[1-3-3] BBS ------------- - I am not responsible for uploading new releases of the Red Alert - Single Player Mission Creation Guide to bulletin board systems. I have - control over neither them nor their naming conventions, and can not - guarantee that a given BBS will hold a copy of the creation guide in - their files area. - - ATTENTION: All BBSes, CompuServe, America Online, and all other - information services. PLEASE conform to the naming standard of the Red - Alert Single Player Mission Creation Guide when placing this file on - your system. The file name should be 'racg?.zip' where the '?' is the - revision number of the guide or 'racg?.txt' if the guide is a text file - instead of PKZIPped. - - -[1-4] Contributing to the guide -================================ - If you have something to add to the guide, please send E-mail to - 'andrewg@light.iinet.net.au' or 'cfhark@msn.com' (no quotes), explaining - your addition. It will be reviewed, and if accepted, edited and added - to the next revision of the strategy guide. In the E-mail, please - supply your name (do not rely on us to extract it from the mail - header). Please be as detailed as possible in your submission. - - Please note that all submissions to the guide become property of the - authors (Andrew Griffin and C.F. Harkins) and that they may or may - not be acknowledged. By submitting to the guide, you grant permission - for use of your submission in any future publications of the guide in - any media. The authors reserve the right to omit information from a - submission or delete the submission entirely. - - -[1-5] Acknowledgements -======================= - Many thanks to Roger Wong for allowing me to copy the style of his Red - Alert Internet Strategy Guide. - Much gratitude to Osprey for providing some superb explanations for - part 2 of the [TeamTypes] entry, along with a lot of other information, - including the new fences1.mpr file. - - The following people have provided useful information that has been - incorporated into this guide: - Gavin Pugh, Jaakko Nenonen, Guy Ulmer - - -[1-6] Accuracy of Information -============================== - We have made a significant effort to make sure that the information - contained within this guide is as accurate as possible. However, this - is not always possible when it comes to sections such as the teamtypes - section. - - All information retrieval is subject to personal bias, and it may be - the case that the testbeds that were used in the collection of this - information introduced a bias into what we were seeing. - - - -============================== --SECTION ONE- GENERAL OVERVIEW -============================== - ------------------------------------ -CHAPTER [2] Notes Before You Start ------------------------------------ - -[2-1] Negative numbers - what's the deal? -========================================== - If you look at the original Red Alert missions, you will notice - almost immediately that the numbers used in this guide for things such - as speech items, sound effect, etc are completely different from those - used in the missions. However, on closer scrutiny, you will see that - this is, in fact, not the case. The numbers used in the original - missions are all negative numbers, those used in this guide are all - positive numbers. - - To convert from the negative numbers in the original missions to the - positive numbers used in this guide, you simply do the following: - if the negative number is in the negative hundreds (ie -200, -100, -57 - etc), then all you have to do is add 256 to that negative number to get - the positive number. In the rare occasions where the negative number is - is the negative 65,000 range, then you add 65536 to get the respective - positive number. - - You may be wondering why we chose to use the positive numbers rather - than the negative numbers. There are two reasons for this. The first - reason is that it is simply more intuitive to use the positive numbers. - The second reason comes from a belief that I have that the use of the - negative numbers in the original mission files comes from a bug in the - Westwood mission creation program. Apparently the parser is competent - enough to deal with this error, which is a possible reason it was never - picked up. Of course, it doesn't matter one way or another, as long as - it works. - - If you really want to use negative numbers, then simply subtract 256 - from the numbers that we have given you. The only place you don't use - negative numbers (another reason I assume the occurance of negative - numbers is a programming bug) is where the second part of a trigger is - used to specify a specific country. In these cases, the Westwood - missions use the positive country numbers. - - -[2-2] Determining where things go -================================== - One of the first things you may notice is that you need to specify - cell values for a wide variety of things, but there really isn't an easy - way to get the required cell values when using the terrain editor. - There are a number of ways in which you can use the terrain editor to - provide cell values, although all but one method are work-arounds. - However, all methods require you to load up a file after you have - finished editing the map. For this reason, if you are using Windows 95, - you have a great advantage, as you can just minimise the terrain editor, - and open the required file. For users that only have MS-DOS installed - on their computers, I am afraid that you will exit the terrain editor - (and hence suffer the long load time when you want to use it again). - - The easiest way to use the terrain editor to determine the numbering - of a specific cell on the map is to use the flags. When you place the - flags, you are actually creating an entry in the [Waypoints] section of - the map file. It is then very easy for you to get these cell values for - use in other regions of the ini file. However, there are unfortunately - only a limited number of flags, meaning that if you use this method that - you will have to repeatedly save the map file to get further cell - values. The color sequence of the flags is the same as the waypoint - number sequence. - - The other method to get cell values is to use something else to - pin-point a cell value. This must be something that appears in a - section like [Terrain], which means trees, or a goldmine. You cannot - use things that appear as an overlay (gold, gems, walls etc), as these - are encoded into the [OverlayPack] section of the ini file. If you - decide to use this method of determining a cell's numbering, you should - do it before you place the rest of the map's terrain features (i.e. finish - the map in so far as you have all the cliffs and rivers and gold that - you want, but don't put in any trees yet). Use your personal preference - as to whether you want to use a single type of tree for this job, or - whether you want to use multiple types (personally, I find it easier to - use a single type, with a goldmine occasionally thrown in to highlight a - particular cell). Then, place these trees (or etc) around the map where - you want to place things like buildings, units, or that you just want to - specify as waypoints. - - Once you have edited your ini file using these cell values to place - your structures and units, you can then edit your .mpr file to get rid - of the now superfluous terrain features. - - This is the most tedious part of the whole process. - - -[2-3] .ini and .mpr files -========================== - When you use the supplied terrain editor to create a map, saving your - map creates a file with an .mpr extension. The name of the - file will correspond to the name you gave the map when it was created, - taking the first seven (at most) letters to create the filename. The - format of a .mpr file is the same as an .ini file, and you should use - this .mpr file as the template of your mission file. Multiplayer files - have the extension .mpr (when you use the terrain editor, you are - actually creating a multiplayer mission). - - The files you will be using to create single player missions must be - given the extension .ini. These files (as do the .mpr files) have the same - format as all .ini files, in that they consist of a number of different - sections. Each section contains a heading enclosed in square brackets - (such as [England]), and consists of a number of entries, one to a line, - after that heading. A ';' (semi-colon) signifies a comment, and - everything after a ';' is ignored. - - To create a single player mission, you must give your .ini file a - specific name, corresponding to the mission that you wish to replace. - See the section Red Alert Mission Tree for the internal mission numbers - (i.e. scg01ea, scg02ea etc); you take this internal mission number as the - first part of the filename, and give the file the extension .ini (so, - you will get scg01ea.ini, scg02ea.ini etc). By using the correct - filename, you are able to replace the original missions in Red Alert - with your new mission. - - -[2-4] A warning about Red Alert's parser -========================================= - You should be made aware that the parser Red Alert uses to read in the - .ini files is case sensitive. This means that if you have a section - called [Terrain], that you will have no trees (you must use [TERRAIN]). - Always use the exact spelling we have given in this document. A single - typo can crash this game horribly. It is best to construct the scenario - in small pieces, testing as you go. The DOS version is much - more tolerant of errors than the Windows 95 version. - - -[2-5] Placing walls around the map -=================================== - Unfortunately, you cannot place any type of walls in the terrain - editor, at least not without some work. To place walls on a map, you - first need to copy a wall piece from one map, and paste that into your - new map. - - First, open your map file that has some walls on it. Next, select the - tile that you require. You select a section of the map by left clicking - on the map - the tile will be surrounded by a white square. Now, click - the right mouse button and choose Copy from the list of choices. - - Load the map you wish to place the wall section onto, and select the - spot into which you wish to place the wall section. Right click and - select Paste. You can now place the wall tiles anywhere around the map. - - Do not worry that the graphics of the walls look strange (ie they do - not join up as they are supposed to do), as this will go away once the - map is loaded again. Alternatively, you can force a section of wall to - be redrawn (they will appear normally after the redraw) by placing a map - tile (usually just the blank cell) next to the wall section. - -[2-5-1] Fences1.mpr file -------------------------- - For your convenience, here is a very small .mpr file that contains 6 - types of walls. It contains the sandbag (SBAG), chain-link (CYCL), - concrete (BRIK), barbed-wire (BARB), wooden (WOOD) and the - normal barbed- wire (FENC) wall types. It also contains the flag - position ring and the crate types (even though these three things - are available in the terrain editor). This file has the name - fences1.mpr. In the Windows 95 terrain editor, it is smaller than the - displayed area, so you cannot scroll the map. Simply put this map into - your Red Alert directory, and copy the required fence type. - - ---cut here--- DO NOT INCLUDE THIS LINE!!! -[Basic] -NewINIFormat=3 -Name=fences - -[Map] -Theater=TEMPERATE -X=32 -Y=32 -Width=14 -Height=14 - -[Waypoints] -98=4128 - -[MapPack] -1=CQAAIIH//v4f/4H/gB8AACCB//5ZAP+CAQD+/gD//+YLWgCCAQDXQA3+oxL/gf+ACQAAII -2=H//v4f/4H/gAkAACCB//7+H/+B/4AJAAAggQD+/h8AgQCACQAAIIEA/v4fAIEAgA== - -[OverlayPack] -1=FwAAIIH//qAR/4kAAQIDBBcUFRb+VQ7/gf+ACQAAIIH//v4f/4H/gA== - ---cut here--- DO NOT INCLUDE THIS LINE!!! - - - ---------------------- -CHAPTER [3] Glossary ---------------------- - -[3-1] Terms used in this document -================================== - The following is a list of terms that are used throughout this - document with which you may not immediately be familiar. This list is - presented so that you are able to grasp the concepts that we discuss - with as little difficulty as possible. - - AI A sad joke. (sorry) Any country under computer control. - anchor cell The upper left hand corner of a structure or terrain - feature is the anchor cell. It is in this cell that you - want the upper left hand corner to be positioned. - attached Used when talking about a trigger. Triggers are said to - be attached to units or buildings when the appropriate - part of the unit or building entry has been filled with - that trigger's name. - autocreation Autocreation means that instead of a teamtype being - manually created by a Create Team trigger action, that - it will be subject to the autocreate function. Each - computer country can have its autocreation function - turned on through a trigger action, after which the - creation of the teamtypes that have autocreation turned - on will be subject to being created, at the whim of the - autocreate function. See [TeamTypes] Section for more - details. - cell A Red Alert map is really a 128x128 square. A cell is - the size of one unit of this square, so the square would - be 128x128 cells in size. See the [Waypoints] section for - a more detailed explanation of the way the map is divided - into cells. - country When we mention a country, we are talking about an - individual entity, much like real countries. They are - either controlled by the human player, or by the - computer. All units and buildings owned by a country - can only be controlled by the controller of that - country (human or computer). - expires When talking about the global timer, we say that the timer - has expired when the timer count has reached zero. - fired trigger A fired trigger is a trigger that has been activated (ie, - its firing conditions were met). - forced trigger A trigger that, on its own, cannot be fired. It can only - be fired by another trigger. - global timer Like a stop watch that works in reverse. It counts down - from a specified time until it expires. There is only one - global timer in Red Alert. - global value Consider this to be a switch, which has an On and Off - position. We say that a global value is 'set' when it is - in the On position, and that is it 'clear' when it is in - the Off position. - house See country. - IQ level How 'smart' a particular computer player is, in Red Alert - terms. See Discussion on IQ Levels for a more detailed - description on IQ levels in computer players. - full map The entire 128x128 map. This differs from the map that you - will be using for you mission, which is a subset of the - full map square. - mission map That section of the full map that you are using for your - mission. It is a subsection of the full map. - parameter A value that is being passed to some item. - player Usually referring to the human player. - team Shorthand for a teamtype. - teamtype A collection of units, whether they be vehicles, infantry, - ships, aircraft, or a mixture. It can also refer to a - line in the [TeamTypes] section. - time unit The smallest amount of time in Red Alert. This changes - depending on the speed at which you have Red Alert - running, but is 6 seconds of Red Alert time. - It is only used when talking about the duration you want - an activity to occur for, or to have some action occur - at a specified time in a mission. - trigger An action that Red Alert is to perform, either through a - computer player or independent of any player. - trigger event When talking about trigger events, we mean some [thing] - that has occurred in the Red Alert world (even something - as banal as a certain period of time passing). They are - actually tests made by Red Alert, to see if the condition - specified by the event is True. - trigger action When talking about trigger actions, we are talking about - the action that Red Alert is to take in response to a - fired trigger. - - - -================================== --SECTION TWO- SPECIFIC INFORMATION -================================== - ------------------------------------- -CHAPTER [4] Mission File Components ------------------------------------- - -[4-1] [Basic] Section -====================== - The [Basic] section of each mission ini file contains the following - pieces of information (it doesn't have to contain all of these lines, - but these are the valid ones): - - Name= - Intro= - Brief= - Win= - Lose= - Action= - Player= - Theme= - CarryOverMoney= - ToCarryOver= - ToInherit= - TimerInherit= - CivEvac= - NewINIFormat= - CarryOverCap= - EndOfGame= - NoSpyPlane= - SkipScore= - OneTimeOnly= - SkipMapSelect= - Official= - FillSilos= - TruckCrate= - Percent= - -These entries will now be explained in a bit more detail. - -Name=... --------- - This is used to give the mission a name. - Default=none - -Intro=... ---------- - This is the name of the video to play as the introduction movie to - this level. See Available Red Alert Movies for the list of possible - movie names. - A means that no video is being used for the introduction movie. - The introduction movie is played first (before the briefing and - action movies). - Default = - -Brief=... ---------- - This is the mission briefing movie for the level. See Available Red - Alert Movies for the list of possible movie names. - A means that no video is being used for the briefing movie. - The briefing movie is played second (after the introduction movie but - before the action movie). If the user clicks on the mission briefing - button and presses the Video button, this is the video that gets played. - Default = - -Win=... -------- - This is the movie that gets shown when you win the mission. See - Available Red Alert Movies for the list of possible movie names. - A means that no video is being used for the win movie. - Default = - -Lose=... --------- - This is the movie that gets shown when you lose the mission. See - Available Red Alert Movies for the list of possible movie names. - A means that no video is being used for the lose movie. - Default = - -Action=... ----------- - This is the name of the video to play as the action movie for this - level. See Available Red Alert Movies for the list of possible movie - names. - A means that no video is being used for the action movie. - The action movie is played last (after the introduction and briefing - movies). - Default = - -Player=... ----------- - This tells the computer which country the user will be playing as - during this mission. See Available Red Alert Countries for the listing - of available countries. This uses the full name of the country, not the - number or abbreviation. - You should have a valid Player= section in your ini file. If you do - not have a Player= entry in this section, the player will default to - Greece. - -Theme=... ---------- - This is the piece of music to play at the start of the mission. See - Available Red Alert Songs for the listing of available music titles to - play at the start. - An entry of 'No theme' means that there is no specific music to play - at the start of the mission, and that Red Alert should use the normal - method of choosing which music to play. - Default=none - -CarryOverMoney=... ------------------- - This specifies that amount of money that will carry over to the mext -mission when you finish the current one. 1 stands for 100% of money, 0.5 -stands for 50%, etc. - -ToCarryOver=... ---------------- - If 'yes', units and structures at the (victorious) close of this - mission will appear at the start of the next mission where - "ToInherit=yes". They will appear in the exact position and state of - health they where left at the end of the mission. Activities will not - carry over. Guard and harvest seem to be the defaults. Aircraft in - flight will vanish. - -ToInherit=... -------------- - If set to 'yes', see ToCarryOver (above). - -TimerInherit=... ----------------- - This can have the value 'yes' or 'no'. - When set to 'yes', the timer for this mission should start counting - down from where it ended in the previous mission. Furthermore, as soon - as the mission starts, the timer will be activated. - When set to 'no', the counter is not transferred from the last mission. - This value only needs to be set to 'yes' in the mission that is to - have its time carried over to the next mission. The next mission should - have this set to 'no', unless the timer for that mission is also to be - carried over. - -CivEvac=... ------------ - This can have the value 'yes' and 'no'. - When 'no', it means that transport helicopters do not take off when - 'civilian' units are loaded into them, unless there is a trigger for - this action. - When set to 'yes', transport helicopters will take off once 'civilian' - units are loaded into them. - This should actually be called 'TanyaEvac', as the only noticable - difference when this is set to 'yes' is that the transport helicopter - will take off when a Tanya unit enters. If set to 'no', the transport - helicopter will not take off when a Tanya unit enters. - 'Civilian' units does include the GNRL unit. - -NewINIFormat=... ----------------- - If this item is not present with a valid value, the [Trigs] and - [TeamTypes] sections will not be read. 0 is not valid. 3 is always - used, and is the value inserted by Red Alert's terrain editor, which - suggests it also has something to do with either the overlays - (OverlayPack) or the map (MapPack) - - Setting NewINIFormat to 1 or 2 allows the use of the [Overlay] - section rather than [OverlayPack]. At setting 1 the [Trigs] section - will not be read. - -CarryOverCap=... ----------------- - Related to "CarryOverMoney", it specifies the maximum amount of money - that can be carried over from the previous mission. As with the Credits - entry, you multiply this value by 100 to get the real value. - -EndOfGame=... -------------- - This can be set to 'yes' or 'no'. - When set to 'yes', when the player has won the mission, after they - see the Win video, they get to see the Red Alert credits, and after - that are taken back to the main menu. The use of 'yes' for this item - signifies that the campaign is finished. - When set to 'no', the next mission is played, as usual. - -NoSpyPlane=... --------------- - This can be set to 'yes' or 'no'. - When set to 'no', if the player has an airfield and a sufficiently - high techlevel, then they will be able to use the spy plane. - When set to 'yes', the spy plane will not appear on the side bar, even - if the player has a sufficiently high techlevel. The setting also - affects the AI. - -SkipScore=... -------------- - This can be set to 'yes' or 'no'. - When set to 'no', the player is treated to the score screen when he - finishes the mission, where he will see how well he did in that - mission (units killed, money finished with etc). - When set to 'yes', the player does not get this score screen. - -OneTimeOnly=... ---------------- - This can be set to 'yes' or 'no'. - When set to 'yes', after the mission is won by the player, they are - taken back to the main menu, as if they had finished the entire - campaign. This value does not mean that if the mission is failed that - it cannot be retried - the player still gets the option to retry the - mission if they fail. - When set to 'no', winning the mission takes the player to the next - mission in the campaign, as usual (if possible). - -SkipMapSelect=... ------------------ - This can be set to 'yes' or 'no'. - When set to 'no', after the user has finished a mission, they are - given the map of Europe and have to pick one of the flashing boxes for - their next mission. - When set to 'yes', the user does not see the map of Europe. Instead, - Red Alert loads up the next mission FOR THAT LEVEL. This is very - important: if the player just finished scg05ea, then scg05eb will be - loaded, not scg06ea. Note that you can do this even for those levels - that only have a single 'official' mission, eg there is only 1 Soviet - level 1 mission, but if you have an scu01eb.ini file present and this - value set to 'yes', then level scu01eb will be started immediately after - scu01ea is finished. However, it doesn't appear that you can chain - these indefinitely. Adding an scu01ec.ini file didn't work - I would - guess that the only place where a third would be accepted would be - Allied mission 5, where there are already 3 missions (scg05ea eb and - ec). - It would be an unwise thing to have this set for an 'ea' mission if - the map before gave the player a choice of playing either an 'ea' or - 'eb' mission, as they may choose the 'eb' mission, hence by-passing the - first stage of the mission and possibly screwing up your storyline. See - Red Alert Mission Tree for the 'official' mission tree structure. - A side effect of setting this to 'yes' is that the player does not get - the 'Mission Accomplished' text on the screen - it just goes straight to - the win video (if there is one). - -Official=... ------------- - This is always set to 'yes' in the original Red Alert missions. - Giving it a value of 'no' does not seem to have any effect. - -FillSilos=... -------------- - This item can be set to 'yes' or 'no'. - When set to 'yes', any country that has silos will have any starting - money they have placed in the silos, rather than starting with those - silos empty. This is useful if you want the player/computer to use - thieves at the very start of a mission, before the first harvester can - come in. - When set to 'no', the silos start empty at the beginning of the - mission. - -TruckCrate=... --------------- - This item can be set to 'yes' or 'no'. - When set to 'yes', when a convoy truck (TRUK) is destroyed, it leaves - behind a crate with money in it (a WoodCrate, if you want to change what - is in the crate). Even trucks owned by the player drop crates when - destroyed if this is set to 'yes'. - When set to 'no', a destroyed convoy truck does not drop a crate. - -Percent=... ------------ - - -[4-2] [Map] Section -==================== - The [Map] section of the mission's ini file tells Red Alert the size - and shape of the map that you are using. It also tells Red Alert which - tile set to use. For a detailed description of cells and what the full - map looks like, please read the section on Waypoints. The following is - a typical [Map] entry: - [Map] - Theater=SNOW - X=32 - Y=32 - Width=64 - Height=64 - -Each section of the entry will be described below: - -Theater= --------- - This tells Red Alert which tile set to use. The possible choices are - SNOW, TEMPERATE and INTERIOR. The three choices are self-explanatory in - terms of the tile set they represent. - Please note: the INTERIOR tile set is not used in Red Alert's terrain - editor, and if you change the Theater to INTERIOR and try to load up - that map in the terrain editor, the editor will crash. - -X= --- - This tells Red Alert how far away from the left edge of the full map - the mission map starts. This must always be at least 1. The distance - is the number of cells from the edge. - -Y= --- - This tell Red Alert how far away from the top edge of the full map the - mission map starts. This must always be at least 1. The distance is - the number of cells from the edge. - -Width= ------- - This tells Red Alert the width of the mission map (in cells). This - width plus the X value plus 1 must NOT be more than 128. - -Height= -------- - This tells Red Alert the height of the mission map (in cells). This - height plus the Y value plus 1 must NOT be more than 128. - - Each map must have at least a 1 cell buffer around the edge of the - mission map. This means that X and Y must always have the value of at - least 1, and that Width and Height must always have a value no greater - than 126. Note that while 126x126 maps are possible, Red Alert does not - handle them well. - - -[4-3] Country Specific Information -=================================== - For each country you have in your missions, whether they be in - control of a large base or make a cameo role as a single civilian - infantry unit, you should include some information about that country, - even if it is nothing more than the allies of that country. - To include country specific information into your ini file, you first - take the name of a country (the full name), see Available Red Alert - Countries for this information, and place it within square brackets, - such as [Spain], [Ukraine] and [England] for example. - Under each of these headers, you then add the information that you - want to pertain to that country. - - The available pieces of information that you can include as country - specific information seem to be the following (given through an example - of a complete entry): - - [Greece] - Credits=12 - Edge=South - MaxUnit=50 - MaxInfantry=50 - MaxBuilding=10 - MaxVessel=10 - TechLevel=10 - IQ=3 - Allies=USSR,Turkey - PlayerControl=yes - Firepower=1.0 - Groundspeed=1.0 - Airspeed=1.0 - Armor=1.0 - ROF=1.0 - Cost=1.0 - BuildTime=1.0 - -These will now be explained in more detail: - -Credits -------- - This is the amount of starting cash for that country for the mission. - To get the real amount of cash, multiply the value by 100 (ie a value of - 12 means that that country starts with 1200 cash). - This is cash-in-hand, unless the FillSilos variable (in the [Basic] - section) is set to yes, in which case the cash is stored in any - available silos or refineries. - -Edge ----- - The available values are North, East, South and West. Contrary to - intuition, this does not control the direction from which reinforcements - will arrive. In fact, it doesn't seem to do anything. Probably a - relic from C&C where it did control the direction of reinforcements. - -MaxUnits, MaxInfantry, MaxBuilding, MaxVessel ---------------------------------------------- - I'd guess that it limits the number of vehicles, buildings, ships and - infantry units the country can have on the map at one time. Unknown - whether it overrides the values from the rules.ini file. - Untested as yet. - -TechLevel ---------- - Each building and unit has an associated tech. level at which it can - be built; to be able to build it, the country needs to have a tech. - level of at least that level. - This is mainly used to control what the human player can build in the - mission. - -IQ --- - This sets the IQ level of the country. It would be unwise to set the - human's country to any IQ level but 0 (which is the default for human - controlled countries), as the computer would then be controlling the - human's buildings and units. - See Discussion on IQ Levels for more on how IQ levels affect a game. - -Allies ------- - This is a comma separated list (ie GoodGuy,Greece,Germany,USSR) of the - countries that this country will treat as friends and not attack. - Please note that this is not automatically reciprocated, in that if you - don't want two countries attacking each other, you have to correctly - set the allies field for both country specific information entries. - You use the full name of the country in this list. - -PlayerControl -------------- - By default this is set to 'no'. However, if it is set to 'yes', then - the human player will be able to control the units of this country. The - human player will not own these units, but will be able to direct their - movement, etc. - In addition to being controllable by the human player, when these - units move (whether by being controlled by the human or the computer), - they remove the shroud from the map as the human's own units would. - Any buildings of this country also remove the shroud around them as if - they were owned by the player. - A player cannot use the buildings of this country for construction. - - -[4-4] [STRUCTURES] Section -=========================== - The [STRUCTURES] section contains those buildings which you want to - appear on the map at the beginning of the mission. See Available Red - Alert Structures for the list of building abbreviations. The following - is a typical entry: - - 0=USSR,TSLA,256,7623,0,None,1,0 - - The format of a [STRUCTURES] entry is: - num=country,type,health,cell,facing,trig,???,repair - -Each section of the entry will be described below: - -num ---- - This is the number of the structure. While it probably isn't - necessary, the numbering starts at 0 and increments from there. You - cannot have two buildings with the same number (the latter will replace - the former). - -country -------- - This contains the owner of the structure. See Available Red Alert - Countries for the list of country names. You place the full name here, - not the abbreviation. - -type ----- - This contains the type of building to place on the map. See Available - Red Alert Buildings for the list of building abbreviations (you use the - abbreviation of the building name). Unlike the original C&C, all - buildings can appear in all terrain types, except for those noted in - Available Red Alert Buildings. - -health ------- - This is the condition that the building starts in, on a scale of 1 to - 256. Treat this as a percentage, with 256 being 100%, 128 being 50%, - etc. Remember that some units and buildings have very small amounts of - hit points, so it may not be possible to give them the full range of - numbers (a civilian infantry unit with 5 hit points will only have 2 at - 50% and 1 at 25%, roughly) - -cell ----- - The upper left hand corner of the building is the anchor cell of that - building. This value contains a cell number into which you want Red - Alert to place the anchor of the specified building. - -facing ------- - This is only useful for those structures which can track enemies (gun - turrets, anti-aircraft guns, and SAM sites); it is the direction you - want the particular structure to face at the beginning of the mission. - The following are the basic directions these buildings can point to: 0 - - North (the top of the screen), 64 - East (right hand side of the - screen), 128 - South (bottom of the screen), and 192 - West (left hand - side of the screen). You can also have a few positions in between these - stages; the numbering goes in steps of 16 (ie valid numbers are 0, 16, - 32, 48, 64, etc), with the initial facing of the turret changing with - the appropriate value. - Picture a clock face, and you will more easily be able to picture the - direction the turreted building will face in at the beginning of the - mission. - -trig ----- - The name of a trigger to attach to the building. If you want to - attach a trigger to a building, place the name of the trigger you - want to attach in this position. If you don't want a trigger associated - with the building, set this value to None. - -??(unknown)?? -------------- - Don't know what this is for. - -repair ------- - This number indicates whether the building will be repaired or - not, provided that the computer player has a sufficiently high IQ level - (normally this would be an IQ level of 1 or more, but this may vary if - you have changed the [IQ] section of the rules.ini file). A value of 1 - means it will be repaired. A value of 0 mean it won't be repaired. - - As well as acting as a repairable 'switch', this value also acts as a - rebuild 'switch'. The CP will rebuild this building once it is - destroyed, as long as Production has been turned on and it is in - possession of a construction yard. Also, it seems that once the - building is rebuilt this way, the AI will not repair it! - However, this will only work if that CP has their country in the - [Base] section of the file. That list could have a Count=0, just so long - as the Player= is set to the CP's country. - - -[4-5] [SHIPS] Section -====================== - This section contains the ships that you want to appear on the map at - the beginning of the mission. See Available Red Alert Ships for the - abbreviations of the ship types that you can use here. A typical entry - would look like: - - 0=Greece,DD,256,9265,192,Guard,None - - The format of a [SHIPS] entry is: - num=country,type,health,cell,facing,action,trig - -Each section of the entry will be described below: - -num ---- - This is the number of the ship. While it probably isn't necessary, - the numbering starts at 0 and increments from there. You cannot have - two ships with the same number (the later will replace the former). - -country -------- - This contains the owner of the ship. See Available Red Alert - Countries for the list of country names. You place the full name here, - not the abbreviation. - -type ----- - This contains the type of ship to place on the map. See Available Red - Alert Ships for the list of ship abbreviations (you use the abbreviation - of the ship name). - -health ------- - This is the condition that the ship starts in, on a scale of 1 to 256. - Treat this as a percentage, with 256 being 100%, 128 being 50%, etc. - Remember that some units and buildings have very small amounts of hit - points, so it may not be possible to give them the full range of numbers - (a civilian infantry unit with 5 hit points will only have 2 at 50% and - 1 at 25%, roughly) - -cell ----- - This value contains the cell value into which you wish Red Alert to - place the ship. - -facing ------- - This value it is the direction you want the ship to face at the - beginning of the mission. The following are the basic directions in - which a ship can face: 0 - North (the top of the screen), 64 - East - (right hand side of the screen), 128 - South (bottom of the screen), and - 192 - West (left hand side of the screen). You can also have a few - positions in between these stages; the numbering goes in steps of 16 (ie - valid numbers are 0, 16, 32, 48, 64, etc), with the initial facing of - the ship changing with the appropriate value. - Picture a clock face, and you will more easily be able to picture the - direction the ship will be facing at the beginning of the mission. - -action ------- - This is the action that you want the ship to perform at the beginning - of the mission. The ship will continue to perform this action until it - is told to do something else (by either the player or the computer), is - destroyed, or the action can no longer be performed. See Available - Initial Unit Commands for the list of commands a unit can be given. - Set this to None if you don't want the ship to perform any action at - the beginning of the mission. - The most common use would be to set the ship to either Guard, Area - Guard, Hunt or None. - -trig ----- - The name of a trigger to attach to the ship. If you want to attach a - trigger to a ship, you place the name of the trigger you want to attach - in this position. If you don't want a trigger associated with the ship, - set this value to None. - - -[4-6] [INFANTRY] Section -========================= - This section contains the infantry units that you want to appear on - the map at the beginning of the mission. See Available Red Alert - Infantry Units for the abbreviations of the infantry types you can use - here. The following is a typical entry: - - 0=Greece,E1,256,6977,2,Sticky,64,None - - The format of an [INFANTRY] entry is: - - num=country,type,health,cell,sub_cell,action,facing,trig - -Each section of the entry will be described below: - -num ---- - This is the number of the infantry entry. While it probably isn't - necessary, the numbering starts at 0 and increments from there. You - cannot have two infantry entries with the same number (the latter will - replace the former). - -country -------- - This contains the owner of the infantry unit. See Available Red Alert - Countries for the list of country names. You place the full name here, - not the abbreviation. - -type ----- - This contains the type of infantry unit to place on the map. See - Available Red Alert Infantry Units for the list of infantry - abbreviations (you use the abbreviation of the infantry name). - -health ------- - This is the condition that the infantry unit starts in, on a scale of - 1 to 256. Treat this as a percentage, with 256 being 100%, 128 being - 50%, etc. Remember that some units and buildings have very small - amounts of hit points, so it may not be possible to give them the full - range of numbers (a civilian infantry unit with 5 hit points will only - have 2 at 50% and 1 at 25%, roughly) - -cell ----- - This value contains the cell value into which you wish Red Alert to - place the infantry unit. - -sub_cell --------- - For infantry units, each cell is divided up into 5 sub-cells. It is - these sub-cells that allow five infantry units to be located in one - cell. The locations of the sub-cells within the main cell is: - 1 2 <--- top of cell - 0 <--- middle of cell - 3 4 <--- bottom of cell - This value holds the number of the sub-cell into which you want to - place the infantry unit. If you are placing more than one infantry unit - within the same cell, you must make sure that their sub-cells are - different. - Infantry units are the only units that use sub-cells. - -action ------- - This is the action that you want the infantry units to perform at the - beginning of the mission. The infantry unit will continue to perform - this action until it is told to do something else (by either the player - or the computer), is destroyed, or the action can no longer be - performed. See the section Available Initial Unit Commands for the list - of commands a unit can be given. - Set this to None if you don't want the infantry unit to perform any - action at the beginning of the mission. - The most common use would be to set the infantry unit to either Guard, - Area Guard, Hunt or None. - -facing ------- - This value it is the direction you want the infantry unit to face at - the beginning of the mission. The following are the basic directions to - which a unit can face: 0 - North (the top of the screen), 64 - East - (right hand side of the screen), 128 - South (bottom of the screen), and - 192 - West (left hand side of the screen). You can also have a few - positions in between these stages; the numbering goes in steps of 16 (ie - valid numbers are 0, 16, 32, 48, 64, etc), with the initial facing of - the infantry unit changing with the appropriate value. - Picture a clock face, and you will more easily be able to picture the - direction the infantry unit will be facing at the beginning of the - mission. - -trig ----- - The name of a trigger to attach to the infantry unit. If you want to - attach a trigger to an infantry unit, place the name of the trigger - you want to attach in this position. If you don't want a trigger - associated with the infantry unit, set this value to None. - - -[4-7] [UNITS] Section -====================== - This section contains the vehicles that you want to appear on the map - at the beginning of the mission. See Available Red Alert Vehicles for - the abbreviations of the vehicles types that you can use here. A - typical entry would look like: - 0=Greece,1TNK,256,8246,96,Sticky,None - - The format of a [UNITS] entry is: - num=country,type,health,cell,facing,action,trig - -Each section of the entry will be described below: - -num ---- - This is the number of the vehicle. While it probably isn't - necessary, the numbering starts at 0 and increments from there. You - cannot have two vehicles with the same number (the latter will replace - the former). - -country -------- - This contains the owner of the vehicle. See Available Red Alert - Countries for the list of country names. You place the full name here, - not the abbreviation. - -type ----- - This contains the type of vehicle to place on the map. See Available - Red Alert Vehicles for the list of vehicle abbreviations (you use the - abbreviation of the vehicle name). - -health ------- - This is the condition that the vehicle starts in, on a scale of 1 to - 256. Treat this as a percentage, with 256 being 100%, 128 being 50%, - etc. Remember that some units and buildings have very small amounts of - hit points, so it may not be possible to give them the full range of - numbers (a civilian infantry unit with 5 hit points will only have 2 at - 50% and 1 at 25%, roughly) - -cell ----- - This value contains the cell value into which you wish Red Alert to - place the vehicle. - -facing ------- - This value is the direction you want the vehicle to face at the - beginning of the mission. The following are the basic directions in - which a vehicle can face: 0 - North (the top of the screen), 64 - East - (right hand side of the screen), 128 - South (bottom of the screen), and - 192 - West (left hand side of the screen). You can also have a few - positions in between these stages; the numbering goes in steps of 16 (ie - valid numbers are 0, 16, 32, 48, 64, etc), with the initial facing of - the vehicle changing with the appropriate value. - Picture a clock face, and you will more easily be able to picture the - direction the vehicle will be facing at the beginning of the mission. - -action ------- - This is the action that you want the vehicle to perform at the - beginning of the mission. The vehicle will continue to perform this - action until it is told to do something else (by either the player or - the computer), is destroyed, or the action can no longer be performed. - See Available Initial Unit Commands for the list of commands a unit can - be given. - Set this to None if you don't want the vehicle to perform any action - at the beginning of the mission. - The most common use would be to set the vehicle to either Guard, Area - Guard, Hunt or None. - -trig ----- - The name of a trigger to attach to the vehicle. If you want to attach - a trigger to a vehicle, place the name of the trigger you want to - attach in this position. If you don't want a trigger associated with - the vehicle, set this value to None. - - -[4-8] [TERRAIN] Section -======================== - This section contains various terrain features, such as trees that you - have placed around the map. Most of these items can be placed in the - Red Alert terrain editor. - - A typical [TERRAIN] entry would be: - 7102=T14 - 9107=MINE - - Each entry in the [TERRAIN] section has the format: - cell=type - -cell ----- - This is the cell in which the terrain feature is to be anchored. - -type ----- - This is the type of terrain feature to place in the specified cell. - For the list of available terrain types and the theaters they appear in, - see Available Terrain Types. - - -[4-9] [SMUDGE] Section -======================= - Additional terrain effects are available in Red Alert, in the form of - craters and scorch marks. To place these effects on the map, you must - use the [SMUDGE] section. See Available Smudge Types for a listing of - the various types of smudge graphics that are available. A typical - [SMUDGE] section would look like: - [SMUDGE] - 7723=CR1,7723,3 - 7724=SC1,7724,0 - - Each entry in the [SMUDGE] section has the format: - cell=type,cell2,depth - -Each section of the entry will be described below - -cell ----- - This is the cell in which you want the smudge effect to be placed. - However, it seems as though this can be overridden if the cell2 value is - different from this value. - -type ----- - This is the type of smudge mark to place in the cell. See Available - Smudge Types for a listing of the types of smudge graphics that are - available. - -cell2 ------ - I honestly do not know what this is for. Every example I have seen - has this value equal to the first cell, and whenever I have put a - different cell value in this position, the smudge would be drawn at this - position instead of the first. - -depth ------ - Not an accurate description of what this variable is actually used - for. It can have values from 0 to 3, but cannot be used for the SC type - of smudge effect. For the SC smudges, always set this value to 0 - (otherwise strange graphics glitches occur). - When this value is set to 0, the normal graphic for the smudge is - displayed, but when this value is greater than zero, the graphic is - changed slightly. This new graphic depicts a larger crater, the higher - the number the larger the crater (in a very rough sense). A value of 3 - seems to be the highest value that this can take. - Note that this effect is more pronounced for some crater types than - others. - When the smudge effect is a BIB, and this value is greater than 0, it - seems as though part of the bib graphic is painted over the bib graphic - as it is laid down. I would recommend not using any number other than 0 - if you want to put down a BIB. - - -[4-10] [Base] Section -====================== - The [Base] section is interesting and useful for a number of reasons. - The purpose of the [Base] section is to tell the Red Alert computer - players which buildings they must replace if they get destroyed, and - where they should be placing these buildings. If the computer player is - of sufficiently high IQ (an IQ level of 5 unless you have manually - changed it), then it will be placing its own buildings on the map, but - you can specify in this section buildings which it must place on the - map. - A typical [Base] entry would look like: - Player=Greece - Count=2 - 000=GUN,7463 - 001=GUN,7461 - The Player= is used to determine which computer controlled country - these buildings are specifying. Because you can have more than one - computer controlled country in a mission, this is used so that the wrong - computer country doesn't build the structure. In the original C&C, the - [Base] entry did not have this functionality, and hence you often ended - up with the computer players constructing buildings in each other's - bases. - The Count= is used to specify the number of entries in this particular - section. If you do not wish to have a [Base] section, set count to 0. - If you just have one entry, set it to 1, etc. - Each entry has the following type: - num=type,cell - -num ---- - This is the number of the [Base] entry. It must be a 3 digit number, - starting at 000, and incrementing by 1 for each additional entry. Do - not have repeated numbers. - -type ----- - This is the type of building that you want the computer player to - build. See Available Red Alert Buildings for the list of abbreviations - to use in this area of the entry. - -cell ----- - This specifies the cell at which you want the building to be placed. - It is the building's anchor cell (the top left cell of the smallest - rectangle enclosing the building's graphic). - - If the anchor cell is obstructed, indeed if any part of the area of - land the building needs is obstructed, then the building will not be - constructed. - As soon as the computer player has had its Production turned on, it - will begin construction of these buildings. - - Apart from just replacing destroyed buildings, this section can also - be used to get a computer player to expand their base. The buildings - mentioned in the [Base] section do not need to exist on the map at the - beginning of the mission. You could, for example, construct an entire - base for a computer player but instead of placing it in the [Structures] - section, you could place it in the [Base] section. When that computer - player gets a construction yard, money and a Production order, it will - begin constructing this base. - - There is no way of having multiple [Base] entries for different - computer controlled countries. This is a shame, as it means you can't - be creative and create multiple computer controlled bases from scratch. - - The order in which the buildings appear in the [Base] section - determines the order in which they will be built (ie 000 will be built - first, 001 second etc). - - -[4-11] [Waypoints] Section -=========================== - Waypoints are used in Red Alert for a number of things, but the most - common is to determine the movement of units. A waypoint is simply a - cell that has been identified as having some significance, and that has - been given an alias. - Waypoint 98 determines which section of the mission map to display at - the beginning of the mission. Choose this carefully, since the DOS and - Win95 versions show different amounts of the map. A waypoint that - works in DOS may be too close to the map edge for Win95, causing a - wrap-around to the far edge in Win95. - A typical [Waypoints] section will look like: - [Waypoints] - 1=10298 - 5=9077 - 98=5063 - - Each entry has the format: - alias=cell - -alias ------ - The alias of a waypoint is simply a number. This number cannot be - less than 0, nor greater than 99. - You cannot have multiple instances of the same alias for waypoints, - but you do not have to keep the alias you use in order. You could, for - example, use waypoints 0, 1, 2, 30, 35, 40 and 98, and there would be no - problems. - -cell ----- - This is the cell of the map for which you want to create the alias. - -A further description of cells and how they relate to the map follows. - - The full Red Alert map is a 128 by 128 square, using cells as the - measurement. The map would look something like this: - - +--------------------+ -+- - | | | - | | | - | | 128 cells - | | in height - | | | - | | | - +--------------------+ -+- - - | | - +--- 128 cells in ---+ - | width | - - However, because of the requirement that each map have at least a 1 - cell buffer around the entire edge of the map, the maximum mission map - size is 126 by 126. This full map now looks like the following: - - ********************** -+- *'s represent part of the - *+------------------+* | full map that are not part - *| | |* | of the mission map. - *| 126 cells |* 128 cells - *| in height |* in height In this particular case, the - *| | |* | full map has a single cell - *+------------------+* | boundary around the mission map. - ********************** -+- - |--- 126 cells ---| - | in width | - +--- 128 cells in ---+ - | width | - - You can have any combination of width and height, provided that you - obey the rule that you must have at least a single cell boundary around - the mission map. You could have, for example, the following: map height - of 50 cells, map width of 60 cells, 30 cells from the left, 10 cells - from the top. The map would look like: - - ********************** 10 -+- - ********************** --- | - ******* ******* | | - ******* ******* 50 128 cells - ******* ******* | in height - ********************** --- | - ********************** 68 | - ********************** --- -+- - | 30 | | 38 | - | 60 | - - | | - +--- 128 cells in ---+ - | width | - - Not the prettiest of diagrams, but you should be able to see what I am - trying to explain. - - It is easy to determine the cell numbering. The first row in the map - is numbered from 0 to 127. The second row is numbered from 128 to 255, - etc. Use the formula: - row_number*128 + column_number - to determine the cell numbering. - Hence, the top left corner of the full map will be 0 (this will never - be on any map). - - -[4-12] [CellTriggers] Section -============================== - Celltriggers are used to place various triggers around the map, that - will be fired when the units of some country enter the specified cell. - A typical [CellTriggers] entry looks like: - [CellTriggers] - 10204=kill - 9076=bob1 - 9077=bob1 - - Each entry in the [CellTriggers] section has the format: - cell=trigger - -cell ----- - This is the cell into which you wish to place the trigger. - -trigger -------- - This is the trigger that you want to place into the specified cell. - The name of the trigger must be at most 4 characters in length. The - most common form of triggers that are used as celltriggers are those - that have Player Enters as their trigger event. - - You cannot have more than one trigger per cell. - - -[4-13] [Trigs] Section -======================= - This is the most important part of the ini file, for it determines how - the mission will pan out. It sets the win and lose conditions, and also - controls (to some extent) the way the computer opponents will behave. I - say 'to some extent' because with Red Alert, Westwood has introduced the - notion of giving the computer players some autonomy of the triggers in - the form of variable IQ levels (see Discussion of IQ Levels for more on - this subject). - - -[4-13-1] Trigger Information -============================= - A trigger (in the [Trigs] section of the ini file has the following - format: - name=1,2,h,i,T1,p1,p2,T2,p1,p2,R1,p1,p2,p3,R2,p1,p2,p3 - -Each section of the trigger is described below: - -name ----- - This is simply a name to describe the trigger. It seems as though - there is a maximum trigger name length of 4 characters if you want to - use a particular trigger as a celltrigger. There is probably a limit to - the length of a non-celltrigger trigger name, so it is probably best to - keep the name to a maximum lenght of 6 or 7 letter. The name can be any - combination of letters and numbers, and other symbols (+, _ etc), but - not a 'space' character. - -1 (repeatable) --------------- - The first number tells RA whether this is a repeating trigger or not. - If it has the value 0, then the trigger will only ever be activated once - (not strictly true as the trigger can be fired again if associated with - a teamtype). If it has a value greater than 0, then the trigger is a - repeating trigger (ie it will be fired more than once). - For repeating triggers, there are two types. When the repeating - trigger has a value of 1, the trigger will only occur once the trigger - event has happened to all items (units and buildings) to which this - trigger has been attached. This is useful if you want, for example, - some action to occur after a specific set of buildings have been - destroy. - The second type of repeating trigger is the free repeater. When this - item has the value of 2, it will continue to repeat itself whenever its - trigger event is true. This is of use if you want, for example, to have - the trigger activate every 20 time units. - -2 (which country trigger applies to) ------------------------------------- - If the trigger event requires a country to be specified, then, in some - cases, this holds the country number. Refer to the specific trigger - actions as to which actions require this field to be filled in - correctly. Still, it is probably better to put the correct country in - here in any case, even if only to make it clearer which country this - trigger is being used for. - See Available Red Alert Countries for a listing of country numbers. - -h (when to activate trigger) ----------------------------- - When 0, only the first trigger event (part 5) must be true for the - trigger to be activated. - When 1, the first (part 5) and second (part 8) must both be true for - the trigger to be activated. - When 2, either the first trigger event or the second trigger event - must be true, whichever comes first. - When 3, either the first trigger event or the second trigger event - must be true. - See the upcoming summary (next) for further details on how this - operates. - -i (which actions are triggered) -------------------------------- - When 0, only one trigger action is activated when the event is - triggered. See the summary (next) for which trigger action is - activated, and when. - When 1, both trigger actions are activated when the event is - triggered. - -Summary: Combinations of trigger events and trigger actions ------------------------------------------------------------ - h,i - 0,0 T1 -> R1 - 0,1 T1 -> R1 and R2 - 1,0 T1 and T2 -> R1 - 1,1 T1 and T2 -> R1 and R2 - 2,0 T1 or T2 -> R1 - 2,1 T1 or T2 -> R1 and R2 - 3,0 T1 -> R1, or T2 -> R2 - - Now, in words: - 0,0 T1 true to activate R1 - 0,1 T1 true to activate R1 and R2 - 1,0 T1 and T2 true to activate R1 - 1,1 T1 and T2 true to activate R1 and R2 - 2,0 T1 or T2 true to activate R1 (whichever comes first) - 2,1 T1 or T2 true to activate R1 and R2 (whichever comes first) - 3,0 T1 true to activate R1, or T2 true to activate R2 - - If either T1 or T2 are time dependent and the trigger is a repeating - trigger, then the test for time passage is measured from the last firing - of any part of the trigger. - -T1 (first trigger event) ------------------------ - This is the first event that will cause this trigger to fire. For a - list of trigger events, see Available Trigger Events. - Set to 0 if you don't want a first trigger event (for example, when - you will be forcing the trigger). - -p1 (first parameter) --------------------- - This is called the first parameter when discussing trigger events. - Set to -1 if it is not needed. - -p2 (second parameter) ---------------------- - This is called the second parameter when discussing trigger events. - Set to -1 if it is not needed. - Additional note: In Westwood's original missions, this is set to 0 - when not used. I have personally never seen a problem arise from using - -1 instead of 0, but it may be wise to set this to 0 when it is not - needed. - -T2 (second trigger event) ------------------------- - This is the second event that will cause this trigger to fire. For a - list of trigger events, see Available Trigger Events. - Set to 0 if you don't want a second trigger event. - -p1 (first parameter) --------------------- - This is called the first parameter when discussing trigger events. - Set to -1 if it is not needed. - -p2 (second parameter) ---------------------- - This is called the second parameter when discussing trigger events. - Set to -1 if it is not needed. - Additional note: In Westwood's original missions, this is set to 0 - when not used. I have personally never seen a problem arise from using - -1 instead of 0, but it may be wise to set this to 0 when it is not - needed. - -R1 (first trigger action) -------------------------- - This number holds the first trigger action. This action will occur - when the trigger event(s) has occurred. For a list of available trigger - actions, see Available Trigger Actions. - -p1 (first parameter) --------------------- - This is referred to as the first parameter when talking about trigger - actions (see Available Trigger Actions). - Set to -1 if it is not needed. - -p2 (second parameter) ---------------------- - This is referred to as the second parameter when talking about trigger - actions (see Available Trigger Actions). - Set to -1 if it is not needed. - -p3 (third parameter) --------------------- - This is referred to as the third parameter when talking about trigger - actions (see Available Trigger Actions). - Set to -1 if it is not needed. - -R2 (second trigger action) --------------------------- - If this trigger has more than one trigger action associated with an - event, then the second trigger action is held here. It has the same - possible values as the first trigger action (see Available Trigger - Actions for the full listing). - Set this value to 0 if you don't want this trigger to have a secondary - trigger action. - -p1 (first parameter) --------------------- - This is referred to as the first parameter when talking about trigger - actions (see Available Trigger Actions). - Set to -1 if it is not needed. - -p2 (second parameter) ---------------------- - This is referred to as the second parameter when talking about trigger - actions (see Available Trigger Actions). - Set to -1 if it is not needed. - -p3 (third parameter) --------------------- - This is referred to as the third parameter when talking about trigger - actions (see Available Trigger Actions). - Set to -1 if it is not needed. - - -[4-13-2] Available Trigger Events -================================== - - Event Text - #'s Version ----------------------------- - 0 No Event - 1 Entered by - 2 Spied by - 3 Thieved by - 4 Discovered by player - 5 House Discovered - 6 Attacked by anybody - 7 Destroyed by anybody - 8 Any event - 9 Destroyed, Units, All - 10 Destroyed, Buildings, All - 11 Destroyed, All - 12 Credits exceed - 13 Elapsed time (1/10th min) - 14 Mission timer expired - 15 Destroyed, Buildings, # - 16 Destroyed, Units, # - 17 No factories left - 18 Civilians evacuated - 19 Build building type - 20 Build unit type - 21 Build infantry type - 22 Build aircraft type - 23 Leaves map (team) - 24 Zone entry by - 25 Crosses horizontal line - 26 Crosses vertical line - 27 Global is set - 28 Global is clear - 29 Destroyed, Fakes, All - 30 Low power - 31 All bridges destroyed - 32 Building exists - -Descriptions of how these trigger events operate follows: - -0 No Event --------------- - Used to denote that this trigger is never activated (there is no - event that will cause this to be activated). - It takes no parameters. - This is of use when you want to have a trigger that will be fired by - another trigger, but that you don't otherwise want fired. - -1 Entered by ----------------- - Used to have a trigger occur when a player moves a unit into the - cell. - This can also be used as a 'Captured by' trigger when placed on a - structure (ie it will get fired when the building is taken over by - engineers). - The country is specified in the second parameter. - -2 Spied by --------------- - This trigger must be attached to a structure for it to work. When a - spy infiltrates the structure, the trigger will be fired. It does not - appear to need a country associated with it; setting the second - parameter to -1 will still cause this trigger to be fired when the - player spies upon this building (as will setting the second parameter to - any other value). - Remember, some buildings can't normally be spied upon, but this can be - changed by setting Capturable=yes in the building's entry (see Changing - Red Alert Values for further information on this). - It doesn't seem to need any parameters. - -3 Thieved by ----------------- - Cannot seem to get it to work. - -4 Discovered by player --------------------------- - This trigger must be attached to something (a structure or some type - of unit) for it to be activated. When the player first encounters this - unit/structure, the trigger will be activated. Encountered means - getting a unit in close enough so that the unit/structure is revealed. - This cannot be associated with a specific country, as only the player - can fire this trigger. You don't have to specify the player's country, - nor does this event require any parameters. - -5 House Discovered ----------------------- - This trigger does not need to be associated with anything. It takes - one parameter (the second parameter), which is the number of the country - with which to associate this trigger. When the country specified by the - parameter is discovered, this trigger will fire. Only the player can - fire this trigger, as the visual range of the player and AI countries - are co-extensive. - -6 Attacked by anybody -------------------------- - This trigger must be attached to something (a structure or some type - of unit) for it to be activated. When this unit/structure is attacked, - the trigger is fired. It does not matter which country does the - attacking. - It takes no parameters. - -7 Destroyed by anybody --------------------------- - This trigger must be attached to something (structure or some type of - unit) for it to get activated. When the attached item is destroyed, by - any country, this trigger will activate. - It requires no parameters. - -8 Any event ---------------- - This trigger gets fired when any event at all is met. This may be - handy for setting mission start conditions, as it will always be fired - as soon as the mission begins. - It takes no parameters. - -9 Destroyed, Units, All ---------------------------- - This trigger gets fired when all the units of the specified country - are destroyed. Units include vehicles and infantry. - The country is specified in the second parameter. - Loaded LSTs (when they are not under control) are not included in this - check. - -10 Destroyed, Buildings, All -------------------------------- - This trigger gets fired when all the structures of the specified - country have been destroyed. Please note that civilian structures are - not counted for this (ie V05 etc). - The country is specified in the second parameter. - -11 Destroyed, All --------------------- - This trigger gets fired when all the units and structures of the - specified country have been destroyed. In essence, it is a combination - of events 9 and 10. Like event 10, civilian structures are not counted - for this (ie V05 etc). - The country is specified in the second parameter. - -12 Credits exceed --------------------- - When the number of credits currently held exceeds the value in the - second parameter, this trigger is activated. The second parameter is - the _actual_ number of credits to be exceeded (eg. 5000). - The team for which the credits are tested against is held in - part 2 of the trigger. - -13 Elapsed time (1/10th min) -------------------------------- - When the current time of the mission has passed the value in the - second parameter divided by 10, this trigger is activated. - -14 Mission timer expired ---------------------------- - This trigger gets fired when the global timer has reached zero. It - takes no parameters (so set them to -1). - -15 Destroyed, Buildings, # ------------------------------ - This trigger gets fired when the specified number of buildings have - been destroyed. Unlike the Destroyed, All and Destroyed, Buildings, All - trigger events, civilian buildings are included in the count for this - event. - The second parameter holds the number of buildings that need to be - destroyed. - To specify which country's buildings we are talking about, you must - set part 2 of the trigger (which country the trigger applies to) to the - appropriate country number. - The first parameter is not used (set it to -1). - -16 Destroyed, Units, # -------------------------- - This trigger gets fired when the specified number of units have been - destroyed. - The second parameter holds the number of units that need to be - destroyed. - To specify which country's units we are talking about, you must set - part 2 of the trigger to the appropriate country number. - The first parameter is not used (set it to -1). - -17 No factories left ------------------------ - When the specified country has no "factories" left, this trigger will - be fired. In Red Alert, a "factory" includes: construction yard (FACT), - air field (AFLD), barracks (BARR and TENT), and weapons factory (WEAP). - Helicopter pads (HPAD), dog kennels (KENN), ship yards (SYRD) and sub - pens (SPEN) are not counted as a "factory". - To specify which country's "factories" we are talking about, you must - set part 2 of the trigger to the appropriate country number. - This trigger event does not use any parameters, so set them to -1. - -18 Civilians evacuated -------------------------- - When a civilian infantry unit leaves the map, this trigger will - fire. Civilian units will leave the map when put into transport - helicopters. There seem to be two classes of civilian units, those that - obey the CivEvac entry in the [Basic] section, and those that do not. - More work needs to be done do determine whether this can be fired by - APCs and LSTs as well, and to determine which civilian units fall into - which class. - This does not take any parameters (set them to -1). However, you - need to set part 2 of the trigger to point to the country of the - civilian unit that will fire this trigger (see Available Red Alert - Countries for the numbers of the various countries). - -19 Build building type -------------------------- - The trigger is activated when the specified building is constructed. - For the list of available buildings in Red Alert and their associated - numbers, see Available Red Alert Buildings. Note that constructed means - placed on the map, not just purchased but placed. - The building number is placed in the second parameter. - -20 Build unit type ---------------------- - The trigger is activated when the specified vehicle is constructed. - Ships are not considered to be a vehicle by Red Alert (indeed, there is - no way to have a trigger fire on the construction of a ship type). For - the list of available vehicle types and their associated numbers, - see Available Red Alert Vehicles. - The unit number is placed in the second parameter. - -21 Build infantry type -------------------------- - The trigger is activated when the specified infantry unit is - constructed. - The attack dog is an infantry type. For the list of available - infantry types in Red Alert and the numbers associated with them, - see Available Red Alert Infantry Units - The infantry number is placed in the second parameter. - -22 Build aircraft type -------------------------- - The trigger is activated when the specified aircraft is constructed. - For the list of available aircraft types in Red Alert and their - associated numbers, see Available Red Alert Aircraft. - Note that the use of the spy plane, parabombs or paradrop by the - player will not cause this trigger to be activated, as this isn't seen - to be building the aircraft by Red Alert. - The aircraft number is placed in the second parameter. - -23 Leaves map (team) ------------------------ - The trigger is activated when the specified teamtype leaves the map. - A teamtype can be programmed to leave the map by having a Move action - that specifies a destination that is off the mission map. - The first parameter takes the number of the teamtype that is set to - leave the map. Remember that teamtype numbering starts from 0. - -24 Zone entry by -------------------- - Another trigger that seems to only be usable in celltriggers. When - the "zone" of the cell to which this trigger action is attached is - entered, the trigger gets fired. - The second parameter takes the number of the country which will - activate the trigger when it enters the "zone". - The real question becomes (for this trigger event and the trigger - action Reveal zone of waypoint): what is the "zone"? See the What is - the Zone of a cell? section for an explanation of the "zone". - -25 Crosses horizontal line ------------------------------ - Cannot seem to get it to work. Have tried passing waypoints and - absolute cells as parameters, but nothing works. This is not used - in any of the original Red Alert missions. - -26 Crosses vertical line ---------------------------- - Cannot seem to get it to work. Have tried passing waypoints and - absolute cells as parameters, but nothing works. This is not used in - any of the original Red Alert missions. - -27 Global is set -------------------- - The trigger is activated when the specified global value is in the - 'set' position. - The second parameter holds the number of the global value to test - against. - -28 Global is clear ---------------------- - The trigger is activated when the specified global value is in the - 'clear' position. - The second parameter holds the number of the global value to test - against. - -29 Destroyed, Fakes, All ---------------------------- - Cannot get it to work correctly - it always seems to be fired straight - away. This is not used by Westwood in their missions. - -30 Low power ---------------- - This trigger is fired when the specified country is low on power. - The country to test for low power is specified in the second - parameter. - -31 All bridges destroyed ---------------------------- - This trigger is fired when all of the bridges on the map have been - destroyed. Naturally, indestructible land bridges are not counted for - this event, only those concrete bridges that can be damaged and - destroyed. - This event does not require any parameters. - -32 Building exists ---------------------- - This trigger is fired if a particular building is currently on the - map, for a particular country. - The second parameter holds the building number (see Available Red - Alert Buildings for this list). - Part 2 of the trigger holds the country number. - - -[4-13-3] Available Trigger Actions -=================================== - The following are the available trigger actions in Red Alert: - - Action Text - #'s Version - ------------------------ - 0 No action - 1 Winner is - 2 Loser is - 3 Production begins - 4 Create team - 5 Destroy team - 6 All to hunt - 7 Reinforcement (team) - 8 Drop zone flare (waypoint) - 9 Fire sale - 10 Play movie - 11 Text trigger (ID number) - 12 Destroy trigger - 13 Autocreate begins - 15 Allow win - 16 Reveal all map - 17 Reveal around waypoint - 18 Reveal zone of waypoint - 19 Play sound effect - 20 Play music theme - 21 Play speech - 22 Force trigger - 23 Timer start - 24 Timer stop - 25 Timer extend (1/10th min) - 26 Timer shorten (1/10th min) - 27 Timer set (1/10th min) - 28 Global set - 29 Global clear - 30 Auto base building - 31 Grow shroud one 'step' - 32 Destroy attached building - 33 Add 1-time special weapon - 34 Add repeating special weapon - 35 Preferred target - 36 Launch nukes - -There is no trigger action number 14. - -Descriptions of how these trigger action work, and what they do follows: - -0 No action ---------------- - No action is associated with this trigger. This is usually used when - you don't want a secondary trigger. - -1 Winner is ---------------- - The associated country wins the mission. If this country is not the - player's country, then the player will lose if this trigger is fired. - The third parameter holds the country number. - -2 Loser is --------------- - The associated country loses the mission. If this country is not the - player's country, then the player will win the mission if this - trigger is fired. However, this also causes the game to crash (at least - in some cases). Only associate the player's country with this action. - The third parameter holds the country number. - -3 Production begins ------------------------ - The specified country is able to start production of units and - buildings. If the country does not have production turned on, it cannot - create anything, even if another trigger tells it to. Production cannot - be turned off once it has been turned on. At the beginning of each - mission, production is turned off. Even if "auto-base building" has - been triggered, the country still needs a production trigger before it - can begin producing anything. - The third parameter takes the number of the country. - -4 Create team ------------------ - When activated, the country owning the specified teamtype will attempt - to make the specified teamtype. If it does not have the required - buildings (war factory/barracks) or the requisite units on the map, - this construction will fail. The computer player is not required to have - the prerequisite buildings that the human player must have (i.e. it can - build mammoth tanks without having a service depot), nor is it limited to - what that country would normally be able to build. The USSR could build - light tanks and mobile gap generators if the teamtype called for it, as - England could produce mammoth tanks. - When creating a team, the computer country will first look around - the map to see if there is currently a unit on the map of the specified - type that is not currently in a teamtype and not engaged in a non- - recruitable activity. If there is such a unit, it will be used as part of - the team being created. - The computer will always build additional units after it has created - the teamtype. - Note that computer players with high IQ levels will automatically - create units for themselves that are not specified in teamtypes, nor - which are called to be produced by Create Team commands. - The first parameter takes the number of the teamtype that is to be - created. - -5 Destroy team ------------------- - When activated, the specified teamtype is destroyed, logically. This - means that the units in the specified teamtype no longer perform the - actions of the teamtype, and the computer can use them when creating - new teamtypes. The units in the team will complete the action they were - engaged in when destroyed, and once that action has been completed will - just stay where they were located when the teamtype was destroyed, - presumably in guard mode. All the instances of a particular teamtype - will be destroyed when this trigger action is fired. - The first parameter takes the number of the teamtype to destroy. - Remember, the numbering of teamtypes starts at zero. - -6 All to hunt ------------------ - When this trigger action is fired, all of the units of the specified - country are set to the action Hunt. This causes those units to seek out - their enemies and destroy them. - The third parameter holds the country number that should be set to - hunt. - -7 Reinforcement (team) --------------------------- - This brings in the specified teamtype to the specified waypoint. - The first parameter holds the teamtype to be used as the - reinforcements. Remember, the first occurrence in the [teamtype] - section is numbered 0, not numbered 1. - If the teamtype includes a transport helicopter (probably also an APC - or LST), then you can specify the waypoint at which to drop them off by - using the third parameter. - See the section 'How to get units appearing out of buildings' on how - to do as the title suggests. - -8 Drop zone flare (waypoint) --------------------------------- - This drops a green flare at the specified waypoint, and reveals a - small section of the map around that point. The area revealed is - smaller than that revealed by trigger event 17. - The third parameter takes the waypoint at which to drop the flare. - -9 Fire sale ---------------- - This has the associated country sell off all of their structures. It - takes as its third parameter the country number that is to sell off - its buildings. - Please note that it is possible to have the player's buildings sold in - this way. - It is only the third parameter that determines which country sells - their buildings, part 2 of the trigger has no effect. - -10 Play movie ----------------- - This has Red Alert play the specified movie as soon as the trigger is - activated. Be aware that sounds from the mission can persist into the - first few moments of the movie, as they are not stopped (so if you get - reinforcements and play a movie because of it, the "Reinforcements have - arrived" sound will persist into the start of the movie). - See Available Red Alert Movies for the complete listing of movies - available. - The number of the movie to be shown is stored in the third parameter. - If the third parameter holds a movie number that does not exist on the - cdrom that is currently in the drive, then all that will happen is that - the screen will quickly flash to black, and return normally. - -11 Text trigger (ID number) ------------------------------- - Displays a short text message in the upper left corner of the screen. - The text itself is stored in the tutorial.ini file (see Tutorial.ini). - The third parameter holds the text ID number. - -12 Destroy trigger ---------------------- - The specified trigger is destroyed. This is especially useful if you - want to have a trigger repeat until some action occurs that will halt - that trigger. - The second parameter holds the number of the trigger to destroy - (remember, trigger numbering starts from 0). - -13 Autocreate begins ------------------------ - The specified country has its autocreation ability turned on. The use - of autocreate is tricky, and is controlled through the various teamtypes - used. - The third parameter takes the number of the country for which to turn - on autocreation. - -15 Allow win ---------------- - Similar to global variables. Used when you want a specific objective - to be met before the mission is accomplished. In other words, if the - trigger with this action assigned to it hasn't been fired, but the - actual WIN trigger has been fired, the mission will not end until this - "allow win" trigger is fired. - The third parameter takes the country number that must meet this win - condition. On further examination, it may be that this does not take - any parameters at all (ie the parameters can all be set to -1). - However, I am unsure of this. - -16 Reveal all map --------------------- - Reveals the entire map when the trigger is fired. - It takes no parameters. - -17 Reveal around waypoint ----------------------------- - Reveals the area around the specified waypoint. The area revealed - around the specified waypoint seems to be quite large. - The third parameter holds the waypoint. - -18 Reveal zone of waypoint ------------------------------ - Reveals the area that is considered to be the "zone" of the specified - waypoint. See "What is the Zone of a cell?" for a discussion on what - makes up the "zone". - The third parameter holds the waypoint. - -19 Play sound effect ------------------------ - Plays the specified sound effect. See "Available Red Alert Sound - Effects" for a listing of the available sound effects. - The third parameter holds the sound effect number. - -20 Play music theme ----------------------- - When this trigger is fired, the specified piece of music is played. - See Available Red Alert Songs for the list of song numbers that you want - to play. - The third parameter holds the song number to play. This only seems - to work when there is no other music currently playing. - -21 Play speech ------------------ - Plays the specified piece of speech. See Available Red Alert Speeches - for a listing of the available speeches. - The third parameter holds the speech number. - -22 Force trigger -------------------- - The specified trigger is fired. The trigger that is pointed to - usually has both trigger events set to 0 (no event) so that it cannot - otherwise be triggered, but this does not have to be the case. - The second parameter holds the trigger number. Remember, the first - trigger in the [Trigs] section is number 0, the second number 1, etc. - A destroyed trigger may still be forced. - -23 Timer start ------------------ - The global mission timer is started (the timer is shown). - It takes no parameters (set them to -1). - -24 Timer stop ----------------- - The global mission timer is stopped (the timer is no longer shown). - It takes no parameters (set them to -1). - -25 Timer extend (1/10th min) -------------------------------- - The global mission timer has its duration extended by the specified - duration. The duration specified is in tenths of a minute (i.e. 60 - would extend the timer by 1 minute, etc). - The third parameter takes the duration to add to the global mission - timer. - -26 Timer shorten (1/10th min) --------------------------------- - The global mission timer has its duration decreased by the specified - duration. The duration specified is in tenths of a minute (i.e. 600 - would shorten the timer by 10 minutes, etc). - The third parameter takes the time to remove from the global mission - timer. - -27 Timer set (1/10th min) ----------------------------- - This sets the global timer to the specified time, and begins the - count-down immediately. - The third parameter takes the time to set it to, in tenths of a - minute, eg 60 will set the timer to 6 minutes, 600 to 60 minutes, etc. - -28 Global set ----------------- - The specified global value is placed in the 'set' position. - The third parameter takes the number of the global value to place in - the 'set' position. - -29 Global clear ------------------- - The specified global value is placed in the 'clear' position. - The third parameter takes the number of the global value to place in - the 'clear' position. - -30 Auto base building ------------------------- - Having this as a trigger action essentially puts that computer player - into 'skirmish' mode. The computer player will begin to build any new - buildings and units that it feels it ought to have. Given a large - enough supply of money, it will eventually build massive amounts of - units and structures, the result of which is to bring the game to an - incredibly slow level of play. The computer player will not be - limited to constructing structures specified in the [Base] section, nor - building units contained in teamtypes. - The third parameter holds the number of the country you want to put - into this mode. - -31 Grow shroud one 'step' ----------------------------- - The shroud is increased by one cell all around its border. It takes - no parameters (set them all to -1). - -32 Destroy attached building -------------------------------- - All buildings that have this trigger attached to them explode. It - takes no parameters (set them all to -1). - -33 Add 1-time special weapon -------------------------------- - This is used to give the specified country access to one of the - special weapons, the list of which is available in the section Red Alert - Special Weapons. - Please note that the country still has to wait for the charge-up - period to pass before they are able to use this special weapon. - The third parameter is used to specify which of the special weapons to - give the team. - You specify which team gets this special weapon through part 2 of the - trigger. - -34 Add repeating special weapon ----------------------------------- - This seems not to work. It brings up the sidebar as if it were adding - something to it, but nothing new appears there. - -35 Preferred target ----------------------- - Not fully tested, but it seems to decide what this country should be - targeting from the passed parameter. See Available Target Types for the - numbering. - The third parameter takes the number of the target type. - I am unsure as to which parameter takes the country number, or even - if the computer obeys this command. - -36 Launch nukes ------------------- - Contrary to what you might think, this does not cause the computer - players to launch A-Bombs, at least not in the way you would normally - want. When this trigger is fired, all Missile Silos on the map will - open up and fire an A-Bomb (this includes those Missile Silos that are - owned by the human). When these A-Bombs are launched, you get the - normal voice warning about this occuring, but the A-Bombs never land, - and hence do no damage to anything. - When this is action is activated, the A-Bombs will be launched without - thought to whether the country owning the Missile Silo actually has - waited the necessary time to construct the missile. This means that you - could, for example, have this happen every five seconds if you wanted to - annoy the human palyer that much. Having an A-bomb launched this way - does not reset the countdown timer (at least for the human player). - This action takes no parameters (set them all to -1). - - -[4-14] [TeamTypes] Section -========================== - Teamtypes are used to tell the computer player what units they should - be building, and how they should be constructing those units. Each - teamtype contains a list of units and a list of commands to carry out, - but also a number of variables, each of which alters the behaviour of - that teamtype, whether it be how the teamtype is created, or how it - behaves after it has been created. - It is these additional behavioural modifiers that make it rather - tricky to completely determine a teamtype's behaviour. - - An example of a [TeamType] entry is: - satk2=2,1,15,0,1,-1,-1,2,E1:1,E2:1,4,16:13,0:8,0:2,0:1 - - The form for [TeamType] entries is: - tname=1,2,3,4,5,6,7,8,AA,9,BB - -Each section of the teamtype entry is described below: - -tname ------ - This is just a name for the teamtype, so that you can know what they - are. It can be any combination of alphanumeric letters and symbols, - except spaces. - -1 (country) ------------ - This holds the numeric value of the country that owns this teamtype. - See Available Red Alert Countries for the list of country numbers. - -2 (teamtype characteristics) ----------------------------- - The 2nd teamtype number determines five different team - characteristics. It is the decimal equivalent of a five digit binary - sequence: ABCDE. - A = destroyed members of this team are replaced - B = an inactive duplicate of this team is produced - C = this is an autocreate team - D = this team executes orders regardless of enemy actions - E = this team takes evasive action - - In all cases 1 = yes, 0 = no - - E.g.: yes,no,yes,no,yes = 10101 = - 2^4*1 + 2^3*0 + 2^2*1 +2^1*0 + 2^0*1 = - 16 + 0 + 4 + 0 + 1 = 21 - - A team taking evasive action will avoid, where possible, enemy radii - of visiblity or guard. A team executing orders regardless of enemy - action will not stop to engage in fire-fights with enemy units, though - it may let off some pot-shots en route. - - Here is the full table of available values that this teamtype number - can validly contain. You use the middle number in the teamtype entry. - The third column contains the various characteristics this teamtype will - possess, using the five values above. - - Raw Value Number Characteristics - ----------------------------------- - 00000 0 (nothing special) - 00001 1 E - 00010 2 D - 00011 3 D+E - 00100 4 C - 00101 5 C+E - 00110 6 C+D - 00111 7 C+D+E - 01000 8 B - 01001 9 B+E - 01010 10 B+D - 01011 11 B+D+E - 01100 12 B+C - 01101 13 B+C+E - 01110 14 B+C+D - 01111 15 B+C+D+E - 10000 16 A - 10001 17 A+E - 10010 18 A+D - 10011 19 A+D+E - 10100 20 A+C - 10101 21 A+C+E - 10110 22 A+C+D - 10111 23 A+C+D+E - 11000 24 A+B - 11001 25 A+B+E - 11010 26 A+B+D - 11011 27 A+B+D+E - 11100 28 A+B+C - 11101 29 A+B+C+E - 11110 30 A+B+C+D - 11111 31 A+B+C+D+E - -3 (unknown) ------------ - The influence of this number is not apparent. Westwood almost - invariably uses "7" for a reinforcement from off map, "10" for a - reinforcement from on map. Other patterns are discernible, but no - difference in results has ever been observed by setting this number at - random. - -4 (unknown) ------------ - Westwood uses "0", and very rarely "1" or "2". Again, it's influence - is not known outside of WWS. - -5 (maximum number of instances of the teamtype) ------------------------------------------------ - If the team is an autocreate type as specified by the second number, - this is the maximum number of instances of this team that may exist - concurrently. - - If the team is not of the autocreate type, this functions as a trigger - to make the team. Still, it denotes the same maximum. - -6 (waypoint for team appearance) --------------------------------- - If you are using this team in a Reinforcement trigger, then this holds - the waypoint at which you want the team to appear. You must make sure - that the waypoint you specify here is included in the [Waypoints] - section, otherwise Red Alert will crash (badly). - Set this to -1 if you are not going to use it. - -7 (trigger to attach) ---------------------- - This value holds the trigger that you want to attach to the teamtype. - If you do not wish to attach a trigger to the teamtype, set this number - to -1. Remember, numbering of triggers starts at 0. - This is useful when you want an action to occur when a teamtype is - attacked or destroyed, for example, although more complicated manoeuvers - are possible. - -8 (how many different unit types there are) -------------------------------------------- - This number tells the parser how many different types of units to - expect in this TeamType entry (in section AA). - -AA (list of units in the team) ------------------------------- - This is a comma-delimited list of the units that will make up this - team. There must be as many entries in this list as was specified in - part 8 of the TeamType. Each entry in this list has the form X:Y where - X is the abbreviated version of the unit, and Y is the number of units - of that type. - For the abbreviations of the units, see sections: Available Red Alert - Vehicles, Available Red Alert Infantry, Available Red Alert Aircraft, - and Available Red Alert Ships. - Each team can be made up of a collection of infantry, vehicles, - aircraft and ships. Trucks will not combine with other types in a team. - -9 (how many commands this team has) ------------------------------------ - This number tells the parser how many commands this team is being - assigned (in section BB). - -BB (list of commands to the team) ---------------------------------- - This is a comma-delimited list of the actions that this team will be - asked to perform. There must be as many entries in this list as was - specified in part 9 of the TeamType. Each entry in this list has the - form X:Y, where X is the number of the action to perform, and Y is the - value passed to this action. - For the available actions that can be performed by the team, see - the section Available Team Actions. This will also tell you what form - the Y value must take. - - -[4-14-1] Available TeamType Actions -==================================== - These are the available actions that teams in the [TeamTypes] section - can perform: - - #'s Short Description - ---------------------- - 0 Attack - 1 Attack Waypoint - 2 Change Formation to - 3 Move to waypoint - 4 Move to cell - 5 Guard area (1/10th min) - 6 Jump to line # - 7 Attack Tarcom - 8 Unload - 9 Deploy - 10 Follow friendlies - 11 Do this - 12 Set global - 13 Invulnerable - 14 Load onto transport - 15 Spy on building @ waypoint - 16 Patrol to waypoint - -These are discussed in more detail now: - -0 Attack ------------ - This determines what you want the teamtype to attack. See Available - Target Types for the various types of targets that you can give a - teamtype. - -1 Attack Waypoint --------------------- - The units in the team will go and attack the specified waypoint. If - the unit has the Infiltrate ability, then it will attempt to enter the - building. This will happen even if the country owning the units in this - teamtype owns the building at the waypoint. - If the unit has the C4 ability, it will blow up the building at the - specified waypoint. - The value passed to this action is the waypoint at which you want the - teamtype to attack. - If there is no building at the specified waypoint, the teamtype will - not activate correctly (usually they will just sit in their last - position). - -2 Change Formation to ------------------------- - When given this command, the units in this teamtype will attempt to - change formations to the one specified. See Available Unit Formations - for the listing of formations and their appropriate numbering. - -3 Move to waypoint ---------------------- - The units in the team are to move towards the specified waypoint. - The value passed to this action is the waypoint to which the team - is to move. - -4 Move to cell ------------------ - The units in the teamtype will move towards the specified cell. Why - you would want to use this over Move to waypoint beats me, but I would - guess that there are some occasions where you may want to specify an - absolute cell. - The value passed to this action is the cell to which the teamtype is - to move towards. - -5 Guard area (1/10th min) ----------------------------- - The units in the team will stay where they are and be on the look-out - for enemy units that come near them. If an enemy unit comes into their - guard range, they will go and intercept the enemy. - The value passed to this action is the number of time units you want - them to be on guard for (in steps of one tenth of a minute). - -6 Jump to line # -------------------- - You use this to get repeating actions for the teamtype. The parameter - passed is the action number of the teamtype that you want to jump to. - The first action of a teamtype is numbered 0, the second 1, etc. If you - jump to number 0, you get the teamtype repeating all the commands it - has, looping forever (good for setting up patrol routes). You don't - have to repeat all the action, of course, you could, for example, skip - to action number 2, which would ignore the first two action commands, - and just go from the third. - -7 Attack Tarcom ------------------- - Team moves to top left of map and fires at an off-screen target. - -8 Unload ------------ - If the team contains units that are currently being stored in a - transport of some type (TRAN, APC, LST etc), then passing the team - this command will make the units inside the transport disembark. - It is not passed a value, so set that to 0. - If the teamtype contains a minelayer, the unload command will cause - the minelayer to lay down a mine at its current position. - -9 Deploy ------------ - If the unit in the team is an MCV, sending it this command will cause - it to deploy itself into a construction yard at its present location. - It is not passed a value, so set that to 0. - -10 Follow friendlies ----------------------- - The unit(s) in this team will follow the nearest friendly unit - when that friendly unit starts to move. This following doesn't appear - to be permanent. - It is not passed a value, so set that to 0. - -11 Do this ------------- - The units in the team will perform the following actions. Not all of - these work, and some are made obsolete by other teamtype action - commands. They are actually the same commands as a units can be given - when being placed on the map. See Available Initial Unit Commands for - the listing of the numbering of the possible values you can use here. - -12 Set global ---------------- - The specified global variable is placed into the 'set' position. Pass - this command the number of the global variable that you wish to set. - -13 Invulnerable ------------------ - The units in this teamtype have the Iron Curtain cast on them. - It does not matter whether there is one unit or five units in the - teamtype; all will have the Iron Curtain cast on them (normal rules - about what can be IC'd still apply). - This means that the side does not have to wait for the Iron Curtain to - recharge like the player must. - It is not passed a value, so set that to 0. - -14 Load onto transport ------------------------- - If there is a transport unit (such as an APC etc), then infantry - units in this teamtype will attempt to load onto that transport. The - infantry units travel to the transport unit, not the other way around. - If the transport unit is something like an LST, then vehicles will do - the same thing (travel to the transport and load). - It is not passed a value, so set that to 0. - I have not been able to get a teamtype to load onto a transport, - unload somewhere, and then load again. If the teamtype was given a Move - command after the teamtype unloaded, only the transport moved, which - suggests that the infantry units (or vehicle units for an LST) are no - longer considered to be part of the same teamtype. - -15 Spy on building @ waypoint -------------------------------- - -16 Patrol to waypoint ------------------------ - Similar to Move to waypoint, it takes as its parameter the waypoint to - patrol to. It differs from the Move command in that the units in the - teamtype will move out of their patrol route to actively go and engage - enemy units and buildings that are within their patrol range as they - move to the waypoint. - WARNING: Having the teamtype patrol to a waypoint takes up - considerable processing power, as it scans for enemy units with each - step it takes. If you have more than 1 or 2 teamtypes doing this action - at the same time, it will introduce some jerkiness to Red Alert (on a - P166). If you have a lot of teamtypes performing patrols to waypoint at - the same time, Red Alert will crawl. - - -[4-15] [MapPack] Section -========================= - This section of the ini file contains the information about the full - map for your mission. It is encoded in base64, but as the terrain - editor created this section for you, there is not that much to know. - The encoding method for the [MapPack] section has been cracked. Take - a look at the Internet Resources for a site that carries information on - how to decode this section after the base64 decryption. - - -[4-16] [OverlayPack] Section -============================= - Overlays are those sections of the map that are placed on top of the - map, such as gold and gems and walls. I assume that it is also encoded - in base 64. The terrain editor takes care of this section as well. - The encoding method for the [OverlayPack] section has been cracked. - Take a look at the Internet Resources for a site that carries - information on how to decode this section after the base64 decryption. - - -[4-17] [Digest] Section -======================== - This appears to be some form of checksum for the file when it is saved - in the terrain editor. If you edit a file with a [Digest] section, then - Red Alert will pop up an error saying the scenario may be corrupt, but - otherwise behave normally. It is best to delete the [Digest] section. - - -[4-18] [Briefing] Section -========================== - You can use the [Briefing] section in a mission's .ini file to specify - the briefing you want for that mission by putting any sort of - mission.ini file into the Red Alert directory. However, the mission.ini - entry will take precedence over that in the [Briefing] section. - Using this method is much easier than using the mission.ini file - method, as anyone playing a new mission just needs a blank mission.ini - file in the directory. This blank file will override all the scXXXeX - mission briefings, and the new missions can then get the briefings from - within their own .ini files instead, by using the [Briefing] section. - The format of this section is the same as a mission.ini entry. - eg. [Briefing] - 1=Your Briefing Goes Here - 2=Etc Etc @@ Good Luck - - -[4-19] [Overlay] Section -========================= - Instead of storing the map overlays in the [OverlayPack] section, - setting the NewINIFormat variable in the [Basic] section to the correct - variable allows the use of the [Overlay] section. It is formatted like - the original C&C [Overlay] section. - - This section will not be explained in this document due to the - presence of the [OverlayPack] section. If a map editor is released that - requires this section be explained, then this section will be revised. - - - -------------------- -CHAPTER [5] Tables -------------------- - -[5-1] Available Red Alert Movies -================================= - These are the names and numbers of all the video clips in RA. The - movie numbers are placed in the third parameter of the trigger action): - - Movie Plays on Plays on -Names #'s Soviet Allies Descriptions --------------------------------------------------- -AAGUN 0 yes yes anti-aircraft guns firing at yaks - while barracks get strafed -MIG 1 yes no MIG flying along and shooting tank -SFROZEN 2 yes no dead (Soviet) soldier in bunker in - snow -AIRFIELD 3 yes no yak moving out of hanger onto - airstrip with lots of other yaks -BATTLE 4 no yes destroyed tanks, jeeps etc on field - (ends with tank exploding) -BMAP 5 yes yes dagger falling onto map of Europe, - filling it red (Soviet win video) -BOMBRUN 6 yes no bombing run by badger bomber onto - building -DPTHCHRG 7 yes no depth charge attack on sub -GRVESTNE 8 no yes gravestone of Tanya -MONTPASS 9 no yes convoy of 3 trucks -MTNKFACT 10 yes no construction of heavy/mammoth tank -CRONTEST 11 no yes chronosphere in action (expanding - blue field engulfs units) -OILDRUM 12 no yes looking through binoculars into - base, tank fires shell into barrel - that explodes - -ALLYEND 13 no yes allied ending (Stalin found but left - buried) -RADRRAID 14 yes no 2 tanks attacking radar dome and - pillboxes -SHIPYARD 15 no no ****NOT ON EITHER DISK**** -SHORBOMB 16 no yes cruiser tactical display and then - bombing shore target -SITDUCK 17 yes no sub attacking cruiser (2 torpedo hits) -SLNTSRVC 18 yes no sub glides past, along ocean floor -SNOWBASE 19 no no ****NOT ON EITHER DISK**** -EXECUTE 20 yes no firing squad kills person in snow -REDINTRO 21 yes yes Red Alert's intro movie sequence -NUKESTOK 22 yes no mushroom cloud from A-bomb -V2ROCKET 23 yes no 2 V2 rockets being launched off ledge -SEARCH 24 yes no search lights being trained on - prison complex -BINOC 25 no yes man with binoculars looking at - heavy tanks travelling along road -ELEVATOR 26 no yes soviet lift going down (or up) -FROZEN 27 no yes dead (Allied) soldier in bunker -MCV 28 no yes MCV is snow (stops moving but - doesn't deploy) -SHIPSINK 29 no yes helicopter over water going to - damaged and sinking cruiser -SOVMCV 30 yes no MCV in snow (stops moving but - doesn't deploy) -TRINITY 31 no yes Eiffel Tower in foreground of - nuclear strike -ALLYMORF 32 yes yes morph into Allied symbol (Allied - win animation) -APCESCPE 33 no yes APC running away from burning base -BRDGTILT 34 no yes bridge over a river (snow) -CRONFAIL 35 yes yes chronosphere blowing up while trying - to activate -STRAFE 36 yes no yak strafing jeeps as they cross a - bridge -DESTROYR 37 no yes boats travelling up river (snow) -DOUBLE 38 yes no 2 MCV's travelling across grass field -FLARE 39 yes yes person signalling with flare, then - planes fly overhead (snow) -SNSTRAFE 40 yes no yak making strafing row of people - in village; teddy bear is dropped -LANDING 41 yes yes soviet tech. centre with 2 tesla coils - out front, transport helicopter - lands (snow) -ONTHPRWL 42 yes no sub moving along ocean floor -OVERRUN 43 no yes 2 soldiers in foxhole, they run out - just before tank runs over that - foxhole -SNOWBOMB 44 yes yes cruiser firing at base and hitting it -SOVCEMET 45 yes no gravestone with R.I.P on it -TAKE_OFF 46 yes no transport helicopter lifting off -TESLA 47 yes no tesla coil zapping medium tank -SOVIET8 48 yes no soviet briefing -SPOTTER 49 yes no binocular view of 3 soldiers -ALLY1 50 yes yes allied briefing -ALLY2 51 no yes allied briefing -ALLY4 52 no yes allied briefing -SOVFINAL 53 yes no soviet end video - Kane is the future! -ASSESS 54 no yes man in snow with binoculars watching - base; focuses on Iron Curtain -SOVIET10 55 yes no soviet briefing -DUD 56 no yes bird on nuclear missile that didn't - explode (in London?) -MCV_LAND 57 no yes helicopter landing in snow next to - truck -MCVBRDGE 58 yes no MCV moving across bridge -PERISCOP 59 yes no sub targeting cruiser through - periscope, and launching a torpedo - at it -SHORBOM1 60 no yes cruiser tactical display (see 16, - but it doesn't attack afterwards) -SHORBOM2 61 no yes cruiser pounding shore base -SOVBATL 62 yes no destroyed heavy tanks, APCs, - helicopters, with helicopters - flying overhead -SOVTSTAR 63 yes yes soviet star (Soviet win animation) -AFTRMATH 64 no yes binocular view of destroyed base; - focuses on destroyed Iron Curtain - (see 54) -SOVIET11 65 yes no soviet briefing -MASASSLT 66 no yes view of city, then tanks come - rolling in, followed by - helicopters (city is Soviet) -ENGLISH 67 **no** no ****NOT ON EITHER DISK**** -SOVIET1 68 yes yes soviet briefing -SOVIET2 69 yes no soviet briefing -SOVIET3 70 yes no soviet briefing -SOVIET4 71 yes no soviet briefing -SOVIET5 72 yes no soviet briefing -SOVIET6 73 yes no soviet briefing -SOVIET7 74 yes no soviet briefing -PROLOG 75 yes yes Einstein travelling back in time - to get Hitler -AVERTED 76 yes no computer room with 'meltdown - averted' message -COUNTDWN 77 yes no computer room with 'meltdown - imminent' message -MOVINGIN 78 yes no convoy of 3 trucks -ALLY10 79 no yes allied briefing -ALLY12 80 no yes allied briefing -ALLY5 81 no yes allied briefing -ALLY6 82 no yes allied briefing -ALLY8 83 no yes allied briefing -TANYA1 84 no yes Tanya about to be interrogated - (with needle) -TANYA2 85 no yes Tanya getting rescued (shooting guy) -ALLY10B 86 no yes allied briefing -ALLY11 87 no yes allied briefing -ALLY14 88 no yes allied briefing -ALLY9 89 no yes allied briefing -SPY 90 no yes Russian guard getting mugged by spy -TOOFAR 91 no yes bridge being blown up by commandos - in dingy -SOVIET12 92 yes no soviet briefing -SOVIET13 93 yes no soviet briefing -SOVIET9 94 yes no soviet briefing -BEACHEAD 95 yes no turret on beach attacking tanks as - they come out of an LST; pans out - to ocean where more LST wait -SOVIET14 96 yes no soviet briefing -SIZZLE 97 yes yes Land of Lore 2 preview -SIZZLE2 98 yes yes Bladerunner preview -Counterstrike only: -ANTEND 99 *counterstrike only* Queen ant dying in fire - ant end - movie. -ANTINTRO 100 *counterstrike only* "It came from Red Alert" - ant - intro movie. - - There are 3 videos that are on neither cdrom: SNOWBASE, SHIPYARD, and - ENGLISH. - SNOWBASE and SHIPYARD perform as other videos do when the wrong cdrom - is in the driver, but ENGLISH causes Red Alert to crash (at least the - Windows 95 version) when played from the Soviet cdrom (at least from - the Play Movie trigger). - It is likely for foreign language versions of Red Alert that the - ENGLISH video will have some other name. - - When a movie is specified with the Play Movie trigger and it does not - exist on the cdrom that is currently in the drive, there will be a brief - flash of black (if black can be considered to be a 'flashable' colour), - then the mission will resume. The exception is the ENGLISH movie, which - crashes on the Soviet disk. Do not specify a movie name/number that is - not on the current disk. - - -[5-2] Available Red Alert Songs -================================ -The following songs are available in Red Alert: - - #'s Abbrev. Song Title - --------------------------- - 0 BIGF226M Bigfoot - 1 CRUS226M Crush - 2 FAC1226M Face the Enemy 1 - 3 FAC2226M Face the Enemy 2 - 4 HELL226M Hell March - 5 RUN1226M Run For Your Life - 6 SMSH226M Smash - 7 TREN226M Trenches - 8 WORK226M Workmen - 9 DENSE_R Dense - 10 FOGGER1A Fogger - 11 MUD1A Mud - 12 RADIO2 Radio 2 - 13 ROLLOUT Roll Out - 14 SNAKE Snake - 15 TERMINAT Terminate - 16 TWIN Twin - 17 VERTOR1A Vector - 18 MAP Map Selection theme - 19 SCORE Score screen theme - 20 INTRO Intro theme - 21 CREDITS End Credits theme - - Counterstrike only: - 22 2ND_HAND 2nd_Hand - 23 ARAZOID Arazoid - 24 BACKSTAB Backstab - 25 CHAOS2 Chaos2 - 26 SHUT_IT Shut_it - 27 TWINMIX1 TwinMix1 - 28 UNDER3 Under3 - 29 VR2 VR2 - - Note that the song "AWAIT" mentioned in the rules.ini file in the - ThemeControl section does not actually exist. - - -[5-3] Available Red Alert Speeches -=================================== - For trigger action 21, the following are the spoken events (the speech - number is placed in the third parameter of the trigger action): - - Abbrev. #'s What is said - --------------------------------- - MISNWON1 0 "Mission accomplished" - MISNLST1 1 "Mission failed" - PROGRES1 2 "Unable to comply, building in progress" - CONSCMP1 3 "Construction complete" - UNITRDY1 4 "Unit ready" - NEWOPT1 5 "New construction options" - NODEPLY1 6 "Cannot deploy here" - STRCKIL1 7 "Structure destroyed" - NOPOWR1 8 "Insufficient power" - NOFUNDS1 9 "Insufficient funds" - BCT1 10 "Battle control terminated" - REINFOR1 11 "Reinforcements have arrived" - CANCLD1 12 "Cancelled" - ABLDGIN1 13 "Building" - LOPOWER1 14 "Low power" - NOFUNDS1 15 "Insufficient funds" - BASEATK1 16 "Our base is under attack" - NOBUILD1 17 "Unable to build more" - PRIBLDG1 18 "Primary building selected - none 19 (nothing) - none 20 (nothing) - UNITLST1 21 "Unit lost" - SLCTTGT1 22 "Select target" - ENMYAPP1 23 "Enemy approaching" - SILOND1 24 "Silos needed" - ONHOLD1 25 "On hold" - REPAIR1 26 "Repaired" (may be "repairing") - none 27 (nothing) - none 28 (nothing) - AUNITL1 29 "Airborne unit lost" - none 30 (nothing) - AAPPRO1 31 "Allied forces approaching" - AARRIVE1 32 "Allied reinforcements have arrived" - none 33 (nothing) - none 34 (nothing) - BLDGINF1 35 "Building infiltrated" - CHROCHR1 36 "Chronosphere charging" - CHRORDY1 37 "Chronosphere ready" - CHROYES1 38 "Chronosphere test successful" - CMDCNTR1 39 "Command Centre under attack" - CNTLDED1 40 "Control Centre deactivated" - CONVYAP1 41 "Convoy approaching" - CONVLST1 42 "Convoy unit lost" - XPLOPLC1 43 "Explosive charge placed" - CREDIT1 44 "Credits stolen" - NAVYLST1 45 "Naval unit lost" - SATLNCH1 46 "Satellite launched" - PULSE1 47 "Sonar pulse available" - none 48 (nothing) - SOVFAPP1 49 "Soviet forces approaching" - SOVREIN1 50 "Soviet reinforcements have arrived" - TRAIN1 51 "Training" - AREADY1 52 "A-bomb ready" - ALAUNCH1 53 "A-bomb launch detected" - AARRIVN1 54 "Allied reinforcements have arrived from the north" - AARRIVS1 55 "Allied reinforcements have arrived from the south" - AARIVE1 56 "Allied reinforcements have arrived from the east" - AARRIVW1 57 "Allied reinforcements have arrived from the west" - 1OBJMET1 58 "First objective met" - 2OBJMET1 59 "Second objective met" - 3OBJMET1 60 "Third objective met" - IRONCHG1 61 "Iron Curtain charging" - IRONRDY1 62 "Iron Curtain ready" - KOSYRES1 63 "Kosygin rescued" - OBJNMET1 64 "Objective not met" - FLAREN1 65 "Signal flare detected from the north" - FLARES1 66 "Signal flare detected from the south" - FLAREE1 67 "Signal flare detected from the east" - FLAREW1 68 "Signal flare detected from the west" - SPYPLN1 69 "Spy plane ready" - TANYAF1 70 "Tanya freed" - ARMORUP1 71 "Unit armour upgraded" - FIREPO1 72 "Unit firepower upgraded" - UNITSPD1 73 "Unit speed upgraded" - MTIMEIN1 74 "Mission timer initialised" - UNITFUL1 75 "Unit full" - UNITREP1 76 "Unit repaired" - 40MINR 77 "Forty minutes remaining" - 30MINR 78 "Thirty minutes remaining" - 20MINR 79 "Twenty minutes remaining" - 10MINR 80 "Ten minutes remaining" - 5MINR 81 "Warning, five minutes remaining" - 4MINR 82 "Warning, four minutes remaining" - 3MINR 83 "Warning, three minutes remaining" - 2MINR 84 "Warning, two minutes remaining" - 1MINR 85 "Warning, one minute remaining" - TIMERNO1 86 "Timer stopped" - UNITSLD1 87 "Unit sold" - TIMERGO1 88 "Timer started" - TARGRES1 89 "Target rescued" - TARGFRE1 90 "Target freed" - TANYAR1 91 "Tanya rescued" - STRUSLD1 92 "Structure sold" - SOVFORC1 93 "Soviet forces have fallen" - SOVEMP1 94 "Soviet empire selected" - SOVEFAL1 95 "Soviet empire has fallen" - OPTERM1 96 "Operation terminated" - OBJRCH1 97 "Objective reached" - OBJNRCH1 98 "Objective not reached" - OBJMET1 99 "Objective met" - MERCR1 100 "Mercenary rescued" - MERCF1 101 "Mercenary freed" - KOSYFRE1 102 "Kosygin freed" - FLARE1 103 "Signal flare detected" - COMNDOR1 104 "Commando rescued" - COMNDOF1 105 "Commando freed" - BLDGPRG1 106 "Building in progress" - ATPREP1 107 "Atom bomb prepping" - ASELECT1 108 "Allied forces selected" - APREP1 109 "A-bomb prepping" - ATLNCH1 110 "Atom bomb launch detected" - AFALLEN1 111 "Allied forces have fallen" - AAVAIL1 112 "A-bomb available" - AARRIVE1 113 "Allied reinforcements have arrived" - SAVE1 114 "Mission saved" - LOAD1 115 "Mission loaded" - - -[5-4] Available Red Alert Sound Effects -======================================== - These are the sound effects available for trigger action 19 (the sound - effect number is placed in the third parameter of the trigger action): - - Abbrev. #'s Type of sound effect - --------------------------------------------- - GIRLOKAY 0 Girl's voice: "Ok" - GIRLYEAH 1 Girl's voice "Yeah?" - GUYOKAY1 2 Guy's voice: "Ok" - GUYYEAH1 3 Guy's voice: "Yeah?" - MINELAY1 4 (mine laying sound? couldn't hear anything) - ACKNO 5 Russian voice: "Acknowledged" - AFFIRM1 6 Military voice: "Affirmative" - AWAIT1 7 Military voice: "Awaiting orders" - EAFFIRM1 8 Engineer's voice: "Affirmative" - EENGIN1 9 Engineer's voice: "Engineering" - NOPROB 10 "Of course" (Einstein's voice?) - READY 11 Military voice: "Ready and waiting" - REPORT1 12 Military voice: "Reporting" - RITAWAY 13 Military voice: "At once" - ROGER 14 Military voice: "Agreed" - UGOTIT 15 Military voice: "Very well" - VEHIC1 16 (didn't hear anything) - YESSIR1 17 Military voice: "Yes sir?" - DEDMAN1 18 Man's death sound - DEDMAN2 19 Man's death sound - DEDMAN3 20 Man's death sound - DEDMAN4 21 Man's death sound - DEDMAN5 22 Man's death sound - DEDMAN6 23 Man's death sound - DEDMAN7 24 Man's death sound - DEDMAN8 25 Man's death sound - DEDMAN10 26 Man's death sound - CHRONO2 27 Sound of chronosphere being fired - CANNON1 28 Cannon shot - CANNON2 29 Cannon shot (tinier than #28) - IRONCUR9 30 Iron Curtain being fired - EMOVOUT1 31 Engineer's voice: "Moving out" - SONPULSE 32 Sonar pulse sound - SANDBAG2 33 Sandbag being squashed - MINEBLO1 34 Mine's 'ping' sound - CHUTE1 35 Sound of torpedo being launched? - DOGY1 36 Dog's bark - DOGW5 37 Dog's whine - DOGG5P 38 Dog's growl - FIREBL3 39 Fireball sound (or something very similar) - FIRETRT1 40 Another fire sound? - GRENADE1 41 Sound of grenade being thrown? - GUN11 42 Machine gun sound (5 quick shots) - GUN13 43 Machine gun sound (8 or 9 very quick shots) - EYESSIR1 44 Engineer's voice: "Yes sir" - GUN27 45 Single gun shot - HEAL2 46 Medic's healing sound - HYDROD1 47 don't know (sound a bit like a steam press) - INVUL2 48 don't know - KABOOM1 49 An explosion - KABOOM12 50 An explosion - KABOOM15 51 An explosion - SPLASH9 52 Object falling into water - KABOOM22 53 Really large explosion - AACANON3 54 Sound of AAGun firing? - TANDETH1 55 Tanya death sound - MGUNINF1 56 Machine gun sound (6 or 7 quick shots) - MISSILE1 57 SAM missile firing - MISSILE6 58 missile firing sound - MISSILE7 59 missile firing sound (V2 rocket?) - x 60 (nothing) - PILLBOX1 61 sound of pillbox firing (machine gun sound) - RABEEP1 62 a beep - RAMENU1 63 a very short beep - SILENCER 64 single sniper shot - TANK5 65 cannon shot (very loud) - TANK6 66 cruiser firing sound (or may be artillery sound) - TORPEDO1 67 torpedo being launched - TURRET1 68 turret gun firing sound - TSLACHG2 69 tesla coil charging up - TESLA1 70 tesla coil firing - SQUISHY2 71 something getting squashed - SCOLDY1 72 very short beep - RADARON2 73 sound of radar coming on - RADARDN1 74 sound of radar going off - PLACBLDG 75 sound of building being placed - KABOOM30 76 an explosion - KABOOM25 77 an explosion - x 78 (nothing) - DOGW7 79 dog's whine - DOGW3PX 80 dog's growl - CRMBLE2 81 sound of something falling down/crumbling down - CASHUP1 82 short bleep - CASHDN1 83 short bleep - BUILD5 84 construction sounds - BLEEP9 85 long bleep sound - BLEEP6 86 bleep sound - BLEEP5 87 bleep sound - BLEEP17 88 bleep sound - BLEEP13 89 bleep sound - BLEEP12 90 bleep sound - BLEEP11 91 bleep sound - H2OBOMB2 92 big explosion (A-bomb going off?) - CASHTURN 93 sound of something being sold - TUFFGUY1 94 Tanya: "Chew on this" - ROKROLL1 95 Tanya: "Let's rock" - LAUGH1 96 Tanya laughing - CMON1 97 Tanya: "Shake it baby" - BOMBIT1 98 Tanya: "Cha-ching!" - GOTIT1 99 Tanya: "That's all you got?" - KEEPEM1 100 Tanya: "Kiss it bye-bye" - ONIT1 101 Tanya: "I'm there" - LEFTY1 102 Tanya: "Give it to me" - YEAH1 103 Tanya: "Yeah?" - YES1 104 Tanya: "Yes sir" - YO1 105 Tanya: "What's up?" - WALLKIL2 106 something (concrete wall being destroyed?) - x 107 (nothing) - GUN5 108 single cannon shot - SUBSHOW1 109 submarine 'decloaking' - EINAH1 110 Einstein: "Ya?" - EINOK1 111 Einstein: "Incredible" - EINYES1 112 Einstein: "Yes" - MINE1 113 explosion - SCOMND1 114 spy: "Commander" - SYESSIR1 115 spy: "Yes sir" - SINDEED1 116 spy: "Indeed" - SONWAY1 117 spy: "On my way" - SKING1 118 spy: "For king and country" - MRESPON1 119 medic: "Medic reporting" - MYESSIR1 120 medic: "Yes sir" - MAFFIRM1 121 medic: "Affirmative" - MMOVOUT1 122 medic: "Moving out" - BEEPSLCT 123 a bleep (deepish in pitch) - SYEAH1 124 thief: "Yeah?" - x 125 (nothing) - x 126 (nothing) - SMOUT1 127 thief: "Moving out" - SOKAY1 128 thief: "Ok" - x 129 (nothing) - SWHAT1 130 thief: "What?" - SAFFIRM1 131 thief: "Affirmative" - - Counterstrike only: - STAVCMDR 132 Stavros: "Commander?" - STAVCRSE 133 Stavros: "Of course" - STAVYES 134 Stavros: "Yes" - STAVMOV 135 Stavros: "Move out" - BUZY1 136 emergency buzzer sound - RAMBO1 137 Rambo (C&C voice): "I've got a present for ya" - RAMBO2 138 Rambo (C&C voice): "Ha ha ha ha" - RAMBO3 139 Rambo (C&C voice): "Real tough guy" - - -[5-5] Available Red Alert Countries -==================================== - The following countries are available in Red Alert: - - Abbrev. Name Number Colour - ----------------------------------- - SPN Spain 0 Yellow/gold - GRE Greece 1 Blue-grey - RED USSR 2 Red - ENG England 3 Green - UKA Ukraine 4 Orange - GER Germany 5 Khaki/light brown - FRA France 6 Aqua - TRK Turkey 7 Red-Ochre - GDI GoodGuy 8 Blue-grey - NOD BadGuy 9 Red - CIV Neutral 10 Yellow/gold - Special 11 Yellow/gold - MP1 Multi1 12 Yellow/gold - MP2 Multi2 13 Blue-grey - MP3 Multi3 14 Red - MP4 Multi4 15 Green - MP5 Multi5 16 Orange - MP6 Multi6 17 Khaki/light brown - MP7 Multi7 18 Aqua - MP8 Multi8 19 Red-Ochre - - Naturally, these colours are as they appear on my screen. Your - perception of them may differ. - - -[5-6] Available Red Alert Buildings -==================================== - The following buildings are available in Red Alert (although not all - of them can be built): - - #'s Abbrev. Name Has Icon - ------------------------------------------------- - 0 ATEK Allied Technology Centre yes - 1 IRON Iron Curtain yes - 2 WEAP Weapons Factory yes - 3 PDOX Chronosphere yes - 4 PBOX Pillbox yes - 5 HBOX Camouflaged Pillbox yes - 6 DOME Radar Dome yes - 7 GAP Gap Generator yes - 8 GUN Gun Turret yes - 9 AGUN Anti-Aircraft Gun yes - 10 FTUR Flame Turret yes - 11 FACT Construction Yard yes - 12 PROC Ore Refinery yes - 13 SILO Ore Silo yes - 14 HPAD Helicopter Pad yes - 15 SAM SAM Site yes - 16 AFLD Airfield yes - 17 POWR Power Plant yes - 18 APWR Advanced Power Plant yes - 19 STEK Soviet Technology Centre yes - 20 HOSP Hospital no - 21 BARR Barracks (Allied) yes - 22 TENT Barracks (Soviet) yes - 23 KENN Dog Kennel yes - 24 FIX Service Depot yes - 25 BIO Bio-Research Laboratory no - 26 MISS Technology Centre/Prison no - 27 SYRD Ship Yard yes - 28 SPEN Sub Pen yes - 29 MSLO Missile Silo yes - 30 FCOM Forward Command Post no - 31 TSLA Tesla Coil yes - 32 WEAF Fake Weapons Factory yes - 33 FACF Fake Construction Yard yes - 34 SYRF Fake Ship Yard yes - 35 SPEF Fake Sub Pen no - 36 DOMF Fake Radar Dome yes - x SBAG Sandbag yes - x CYCL Chain-link fence no - x BRIK Concrete wall yes - x BARB Barbed-wire fence no - x WOOD Wooden fence no - x FENC Barbed wire (the normal type) yes - 43 MINV Anti-vehicle mine no - 44 MINP Anti-personnel mine no - x V01 Church no - x V02 Han's and Gretel's no - x V03 Hewitt's Manor no - x V04 Ricktor's House no - x V05 Gretchin's House no - x V06 The Barn no - x V07 Damon's Pub no - x V08 Fran's House no - x V09 Music Factory no - x V10 Toymaker's no - x V11 Ludwig's House no - x V12 Haystacks no - x V13 Haystack no - x V14 Wheat Field no - x V15 Fallow Field no - x V16 Corn Field no - x V17 Celery Field no - x V18 Potato Field no - x V19 Oil Pump no - x *V20 **NO DESCRIPTION** no - x *V21 Abdul's House no - x *V22 Pablo's Wicked Pub no - x *V23 Village Well no - x *V24 **NO DESCRIPTION** no - x *V25 Church no - x *V26 Ali's House no - x *V27 Trader Ted's no - x *V28 Menelik's House no - x *V29 Prestor John's House no - x *V30 Village Well no - x *V31 Witch Doctor's House no - x *V32 Rikitikitembo's Hut no - x *V33 Roarke's Hut no - x *V34 Musaba's Hut no - x *V35 Aksum's Hut no - x *V36 Mambo's Hut no - x *V37 The Studio no - x BARL (single barrel) no - x BRL3 (cluster of 3 barrels) no - -Counterstrike only: - 84 QUEE Queen ant structure - 85 LAR1 Ant - single ant larva - 86 LAR2 Ant - two ant larvae - - While MINV and MINP do cause the trigger to be activated if they are - made buildable, placing a bought mine causes the construction yard to - go berserk and stops the further placement of any other buildings. - Those structures that have an 'x' where their number should be do not - activate the Build Building type trigger. - Any structure without an icon that is made buildable will get a - 'hall-of-mirrors' icon when displayed. This means that their icon will - be made up of bits of graphics from whatever was last displayed in - that section of the screen. - The civilian structures marked with a * (V20 to V37) do not have any - graphics displayed on either the SNOW or TEMPERATE theatres. In the - original Command and Conquer, they appeared only in the DESERT theatre, - which was not included in Red Alert. They are a left-over from C&C. - The civilian structure V20 and V24 not only have no description - associated with them, but they also are not selectable. - The two types of barrel and mines are not selectable. - - After some digging around, I have determined that the statement that - the V20 to V37 structures are left-overs from C&C days is not quite - true. It is true that they have no graphics, but there is a way of - providing your own graphics for them (see Section [7-14] Advanced - Editing: Just how extensible is Red Alert?) for more on this. - - -[5-7] Available Red Alert Infantry Units -========================================= - The following infantry units are in Red Alert (note that the attack - dog is treated as an infantry unit by Red Alert): - - #'s Abbrev. Name Has Icon - --------------------------------------------- - 0 E1 Rifle Infantry Yes - 1 E2 Grenadier Yes - 2 E3 Rocket Soldier Yes - 3 E4 Flamethrower Yes - 4 E6 Engineer Yes - 5 E7 Tanya Yes - 6 SPY Spy Yes - 7 THF Thief Yes - 8 MEDI Field Medic Yes - 9 GNRL General No - 10 DOG Attack Dog Yes - 11 C1 Joe No - 12 C2 Barry No - 13 C3 Shelly No - 14 C4 Maria No - 15 C5 Karen No - 16 C6 Steve No - 17 C7 Phil No - 18 C8 Dwight No - 19 C9 Erik No - 20 C10 Scientist No - 21 EINSTEIN Prof. Einstein No - 22 DELPHI Special 1 No - 23 CHAN Special 2 No - - The names of the civilian units are not normally visible, but can be - made visible be setting the NamedCivilians variable to yes in the - [General] section of the rules.ini file (or see the section Changing - Red Alert Values on how to do this for an individual mission). - - -[5-8] Available Red Alert Vehicles -=================================== - The following vehicles are available in Red Alert (please note that - ships are not counted as vehicles): - - #'s Abbrev. Name Has Icon - --------------------------------------------------- - 0 4TNK Mammoth Tank Yes - 1 3TNK Heavy Tank Yes - 2 2TNK Medium Tank Yes - 3 1TNK Light Tank Yes - 4 APC Armoured Personnel Carrier Yes - 5 MNLY Mine Layer Yes - 6 JEEP Ranger Yes - 7 HARV Ore Truck Yes - 8 ARTY Artillery Yes - 9 MRJ Mobile Radar Jammer Yes - 10 MGG Mobile Gap Generator Yes - 11 MCV Mobile Construction Vehicle Yes - 12 2VRL V2 Rocket Launcher Yes - 13 TRUK Convoy Truck *Yes* - - Counterstrike only: - 14 ANT1 First ant type No - 15 ANT2 Second ant type No - 16 ANT3 Third ant type No - - The convoy truck does have an icon, but it looks nothing like the unit - does in the game. It looks like the ranger's icon, except the rear part - of the ranger is exploding. This is only in the MS-DOS version of Red - Alert. The Window 95 version of Red Alert has a correct icon (the unit - on the icon actually looks like the convoy truck). - - -[5-9] Available Red Alert Aircraft -================================= - The following aircraft are available in Red Alert: - - #'s Abbrev. Names Has Icon - ------------------------------------------ - 0 TRAN Chinook Helicopter Yes - 1 BADR Badger Bomber Yes - 2 U2 Spy Plane Yes - 3 MIG MIG Attack Plane Yes - 4 YAK Yak Attack Plane Yes - 5 HELI Longbow Helicopter Yes - 6 HIND Hind Helicopter Yes - - The Badger Bomber and Spy Planes, if made buyable by the player, - cannot be selected and hence cannot be moved off the airfield. - - -[5-10] Available Red Alert Ships -================================= - The following ships are available in Red Alert (they don't have any - numbers because they cannot be used in triggers): - - Abbrev. Names Has Icon - ------------------------------------------ - SS Submarine Yes - DD Destroyer Yes - CA Cruiser Yes - LST Land-Sea Tank (transport) Yes - PT Gun Boat Yes - - -[5-11] Available Unit Formations -================================= - - These appear to be the formations that teamtypes can form: - - #'s Formation Description - ------------------------------- - 0 None ? - 1 Tight Very close grouping, slower units manage to keep up - with the faster ones. - 2 Loose Doesn't do much. - 3 Wedge North } - 4 Wedge East } See note below - 5 Wedge South } - 6 Wedge West } - 7 Line N/S Causes the units to spread out in a vertical line - and perform its next command (in that form unless an - obstacle breaks it). - 8 Line E/W The same as above, except it is a horizontal line. - 9 North ? - 10 East ? - 11 South ? - 12 West ? - 13 Air ? - - The Tight formation seems only to work with five infantry units - any - more and it stops. - Note about Wedge: The units will fan out and make a cone shape. The - 'point' of the cone faces in the direction specified. However, once - they form this formation the team seems to stay in that position, or at - most move to the next waypoint and then stop. I believe that this - formation is meant for guarding large areas of space, or it is just - plain buggy. The units will line up from the point and form two - diagonal lines. - - Additional note: to get the formations to work, you need to set them - *before* doing the move command. So, you would use something like - 2:3,3:21 to get a North Wedge at waypoint 21. As noted above, however, - it seems as though all actions following the next move command are - ignored. - - -[5-12] Available Red Alert Special Weapons -=========================================== - These are the special weapons that are available in Red Alert that can - be delivered through the use of a 1-time special weapon trigger action. - - #'s Name - ------------- - 0 Sonar Pulse - 1 Nuclear Strike - 2 Chrono-shift - 3 Parabomb - 4 Paratroopers - 5 Spy Plane - 6 Iron Curtain - 7 **GPS** - - A note on the GPS. While the icon appears as normal and it eventually - becomes active, the satellite will not automatically launch as it does - when the Allied tech. centre is built. If the icon is clicked upon, the - voice will say "Select target", but the cursor does not change into a - target cursor, and hence clicking on the map does not release the - satellite. - - -[5-13] Available Initial Unit Commands -===================================== - Each unit that appears on the map at the beginning of a mission has an - associated starting command. This command tells the unit what to do in - the time before it is given any orders by either the human player or - a computer player. The available commands are: - - #'s Command - -------------- - 0 Sleep - 1 Attack - 2 Move - 3 Qmove - 4 Retreat - 5 Guard - 6 Sticky - 7 Enter - 8 Capture - 9 Harvest - 10 Area Guard - 11 Return (unused) - 12 Stop - 13 Ambush (unused) - 14 Hunt - 15 Unload - 16 Sabotage - 17 Construction - 18 Selling - 19 Repair - 20 Rescue - 21 Missile - 22 Harmless - - Numbers 17, 18, 19 and 21 are undertaken by buildings only. - Not all of these commands actually have the unit/building do anything, - just like the original C&C. - The difference between Guard and Area Guard is that, in Area Guard, - the unit is much more vigorous in defending the area around it, and will - follow any units that come into its defending area. The following - behaviour lasts until it can attack its prey, whereupon the unit will - return to its original position (unless it caught up with the prey - within its initial guard zone, when it will attempt to destroy the - invader). - - Also, units in Area Guard mode seem not to be gathered from - the field when a Create Team command is issued. Those in Guard mode - will be gathered to create the new team (if they are required, of - course). - - -[5-14] Available Terrain Types -=============================== - The following are the valid terrain features: - - MINE ---} gold mine - BOXES01 ---} - BOXES02 } groups - BOXES03 } of - BOXES04 } boxes - BOXES05 ---} - ICE01 ---} - ICE02 } - ICE03 } ice - ICE04 } flows - ICE05 ---} - T01 ---} - T02 } - T03 } - T04 } - T05 } - T07 } - T07 } single - T08 } trees - T09 } - T10 } - T11 } - T12 } - T13 } - T14 } - T15 } - T16 } - T17 ---} - TC01 ---} - TC02 } clumps - TC03 } of - TC04 } trees - TC05 ---} - - The terrain type MINE is the goldmine that is used to stimulate ore - regrowth. - The terrain types T01 to T17 are single trees. - The terrain types TC01 to TC05 are clumps of trees. - The terrain types ICE01 to ICE05 are ice floes. - - The ICE01 to ICE05 graphics are visible in the terrain editor, but - cannot be placed in the terrain editor. They have the following - dimensions: - ICE01 2x2 - ICE02 2x1 (2 cells high) - ICE03 1x2 (2 cells wide) - ICE04 1x1 - ICE05 1x1 - - The terrain types BOXES01 to BOXES05 are various groups of boxes that - are used in the interior missions. Their graphics are only drawn when - using the INTERIOR theater (they seem to be totally discarded in the - other theaters, as the space where they are supposed to be can be walked - over). - - -[5-15] Available Smudge Types -============================== - The following are the available smudge types: - - CR1 ---} - CR2 } - CR3 } craters - CR4 } - CR5 } - CR6 ---} - SC1 ---} - SC2 } - SC3 } scorch - SC4 } marks - SC5 } - SC6 ---} - BIB1 ---} - BIB2 } dirt - BIB3 ---} patches - - The smudge effects CR1 to CR6 are various types of small craters. - The smudge effects SC1 to SC6 are various types of scorch marks. - The smudge effects BIB1 to BIB3 are the patches of dirt that appear at - the base of most buildings (the light coloured dirt). - - -[5-16] Available Target Types -============================== - These are the numbers that represent the various 'targets' in Red - Alert. The descriptions should be self-explanatory. - - #'s Short Description - ---------------------- - 1 Anything - 2 Buildings - any - 3 Harvesters - 4 Infantry - 5 Vehicles - any - 6 Ships - any - 7 Factories - 8 Base Defences - 9 Base Threats - 10 Power Facilities - 11 Fake Buildings - - - --------------------------- -CHAPTER [6] Miscellaneous --------------------------- - -[6-1] Tutorial.ini -=================== - All of the short text pieces that are displayed during Red Alert - missions are stored in a text file called tutorial.ini. This file is - part of the main.mix file, but if you put a tutorial.ini file in your - Red Alert directory, it will override the one in the redalert.mix file. - You can change the text of the entries already present without any - trouble. Keep the text that you want to display to a length of less than - that is specified in the file (41 characters). - The text number is placed in the third parameter of the trigger - actions. - You are able to include additional entries in the tutorial.ini file - of your own, you do not have to stick to the 65 entries in the original - tutorial.ini file. To add new entries is simple, just put in the new - lines of your own, for example: - 66=Wow, a new line of text - 67=Yet another home-grown message - - - The original tutorial.ini file follows: - - ----cut here---- DO NOT INCLUDE THIS LINE! -[Tutorial] -1=Objective 1 Complete -2=Objective 2 Complete -3=Objective 3 Complete -4=Defend Command Center -5=Destroy all Allied units and structures -6=Destroy all Soviet units and structures -7=Build your base - -;Specific text -;MAX is below! Don't exceed! -;X=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - -8=Find Einstein. -9=Get Einstein to the helicopter -10=Clear the way for the convoy -11=Time is running out! -12=Convoy approaching -13=Destroy all bridges -14=Get Spy into War Factory -15=Destroy all SAM sites -16=Get Tanya to the helicopter -17=Capture Radar Dome -18=Destroy Sub Pens -19=Keep the Chronosphere on-line -20=Restore full power -21=Get a spy into Command Center -22=Bring Kosygin back to your base -23=INCOMING TRANSMISSION -24=Capture the Command center! -25=Get engineers to control computers -26=Clear the naval channel -27=Capture all Tech. centers -28=Destroy the Iron Curtain -29=Use engineers to operate computers -30=Re-program all generator computers -31=Hangar turret powering up. Standby -32=Turret deactivated -33=Acquire money to build your base -34=Destroy civilian forces and town -35=Secure the middle island -36=Get the convoy across the map -37=Run for it! -38=Capture the other tech. centers -39=Don't approach the Chronosphere! -40=Kill the enemy spy -41=Disrupt Allied communications -42=Get trucks to other shore -43=Get engineers to coolant stations! -44=Use main terminal to shut down core -45=Meltdown Imminent! -46=Destroy convoy truck -47=Destroy Allied naval base -48=Destroy Radar domes -49=Capture the Chronosphere! -50=Get spy into enemy tech. center - -;Death explanation text - -51=Einstein was killed -52=Tanya was killed -53=Radar Dome was destroyed -54=Command Center destroyed -55=Chronosphere self-destructed -56=All Engineers killed -57=Spy escaped -58=Time ran out -59=Convoy destroyed -60=Spy killed -61=Kosygin killed -62=Einstein was in tech. center -63=Not enough available power - -;misc - -64=Charge placed on Generator -65=Find and Rescue captured Engineers - ---cut here--- DO NOT INCLUDE THIS LINE! - - -[6-2] Mission.ini -================== - Each mission in Red Alert contains a brief text description of the - objective of the mission. These text descriptions are stored in a file - called mission.ini, which is stored in the main.mix file, but which can - be overridden if you place a file called mission.ini into your Red Alert - directory. - If you place a mission.ini file into your Red Alert directory, Red - Alert will use the mission briefings from this file rather than the - default ones found in the main.mix file. - If you are using the SkipMapSelect to add extra missions into the - original mission structure, then you can include the new missions' - briefings by adding sections into the mission.ini file. For example, - say you added a second level 1 Soviet mission (scu01eb) through the - use of SkipMapSelect. To get a briefing, you would add a [SCU01EB] - section to the mission.ini file and fill in the appropriate message. - I do not know the exact maximum length an entry can be. - You may notice the occurence of @'s in some of the briefings. These - are used to have the next bit of text start on the next line. It - appears to be the only piece of formatting available in the briefings - (@ is shift-2). Two @'s in a row will produce a blank line between two - sections of text. - You do not have to include entries for all the missions in your - mission.ini file, you could, for example, simply have [SCG01EA] and - [SCG02ea] entries if you just wanted to change the briefings for the - first two Allied missions. Any mission that you don't specify will be - used from the .mix version of the file, or from the [Briefing] section - of the mission's ini file, if it exists. - - The original mission.ini file follows: - - ---cut here--- DO NOT INCLUDE THIS LINE -[SCG01EA.INI] -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. - -[SCG02EA.INI] -1=A critical supply convoy is due through this area in 25 minutes, but -2=Soviet forces have blocked the road in several places. Unless you can -3=clear them out, those supplies will never make it to the front. The -4=convoy will come from the northwest, and time is short so work quickly. - -[SCG03EA.INI] -1=LANDCOM 16 HQS.@TOP SECRET.@TO: FIELD COMMANDER A9@@INTELLIGENCE -2=RECON SHOWS HEAVY SOVIET MOVEMENT IN YOUR AREA. NEARBY BRIDGES ARE -3=KEY TO SOVIET ADVANCEMENT. DESTROY ALL BRIDGES ASAP. TANYA WILL ASSIST. -4=KEEP HER ALIVE AT ALL COSTS.@@CONFIRMATION CODE 1612.@@TRANSMISSION ENDS. - -[SCG03EB.INI] -1=LANDCOM 16 HQS.@TOP SECRET.@TO: FIELD COMMANDER A9@@INTELLIGENCE -2=RECON SHOWS HEAVY SOVIET MOVEMENT IN YOUR AREA. NEARBY BRIDGES ARE -3=KEY TO SOVIET ADVANCEMENT. DESTROY ALL BRIDGES ASAP. TANYA WILL ASSIST. -4=KEEP HER ALIVE AT ALL COSTS.@@CONFIRMATION CODE 1612.@@TRANSMISSION ENDS. - -[SCG04EA.INI] -1=Soviet forces are trying to retake the pass you cleared for our convoys. -2=Don't let this happen. Hold the pass and prevent the Soviets from -3=taking this vital area. Destroy all Soviet units and buildings in -4=this region. - -[SCG05EA.INI] -1=Rescue Tanya. Your spy can move past any enemy unit, except dogs, -2=without being detected. Direct him into the weapons factory located -3=at a nearby Soviet Base where he will hijack a truck and free Tanya. -4=With Tanya's help, take out the air defenses on the island and a Chinook -5=will arrive to rescue her. Then destroy all remaining Soviet buildings -6=and units. - -[SCG05EB.INI] -1=Rescue Tanya. Your spy can move past any enemy unit, except dogs, -2=without being detected. Direct him into the weapons factory located -3=at a nearby Soviet Base where he will hijack a truck and free Tanya. -4=With Tanya's help, take out the air defenses on the island and a Chinook -5=will arrive to rescue her. Then destroy all remaining Soviet buildings -6=and units. - -[SCG05EC.INI] -1=Rescue Tanya. Your spy can move past any enemy unit, except dogs, -2=without being detected. Direct him into the weapons factory located -3=at a nearby Soviet Base where he will hijack a truck and free Tanya. -4=With Tanya's help, take out the air defenses on the island and a Chinook -5=will arrive to rescue her. Then destroy all remaining Soviet buildings -6=and units. - -[SCG06EA.INI] -1=Priority One is to establish a base and get your spy into one of the -2=Soviet tech. centers in the base across the gulf. Data on the Iron Curtain -3=is in there and we need it. Once you get the data complete your mission... -4=wipe out everything. - -[SCG06EB.INI] -1=Priority One is to establish a base and get your spy into one of the -2=Soviet tech. centers in the base across the gulf. Data on the Iron Curtain -3=is in there and we need it. Once you get the data complete your mission... -4=wipe out everything. - -[SCG07EA.INI] -1=LANDCOM 16 HQS.@TOP SECRET.@TO: FIELD COMMANDER A9@@INTERCEPTION OF SOVIET -2=COMMUNIQUE INDICATES THEIR IRON CURTAIN RESEARCH WAS SET BACK BY -3=ESPIONAGE. EXCELLENT WORK, COMMANDER!@@COMMUNIQUE WAS TRACED BACK TO -4=SECRET SOVIET BASE IN BORNHOLM. INVESTIGATE POSSIBLE CONNECTION WITH IRON -5=CURTAIN RESEARCH. CAPTURE RADAR CENTER AND DESTROY SUB PRODUCTION -6=CAPABILITY.@@CONFIRMATION CODE 1138.@@TRANSMISSION ENDS. - -[SCG08EA.INI] -1=Our latest technology, the Chronosphere, is housed in this research -2=station. The timer represents the appointed time for the completion of a -3=vital experiment. The Soviets have learned of this and are moving in. -4=Protect the Chronosphere and the Advanced-Tech research center. Make sure -5=the base is fully powered at the appointed time. If not, all will be lost! - -[SCG08EB.INI] -1=Our latest technology, the Chronosphere, is housed in this research -2=station. The timer represents the appointed time for the completion of a -3=vital experiment. The Soviets have learned of this and are moving in. -4=Protect the Chronosphere and the Advanced-Tech research center. Make sure -5=the base is fully powered at the appointed time. If not, all will be lost! - -[SCG09EA.INI] -1=One of Stalin's top atomic strategists, Vladimir Kosygin, wishes to -2=defect. His knowledge of Stalin's atomic strategies is invaluable to us. -3=We wish to "extract" him from the Riga compound, where he is stationed. -4=@@Use a spy to infiltrate the Soviet command center and contact Kosygin. -5=Once he is out of the building, get him back to your base any way you -6=can. - -[SCG09EB.INI] -1=One of Stalin's top atomic strategists, Vladimir Kosygin, wishes to -2=defect. His knowledge of Stalin's atomic strategies is invaluable to us. -3=We will extract him from the Riga compound where he is stationed. -4=@@Use a spy to infiltrate the Soviet command center and contact Kosygin. -5=Once he is out of the building, guide him back to your base any way you -6=can. - -[SCG10EA.INI] -1=Kosygin has indicated that this is the site of Stalin's main atomic -2=weapons plant. Use extreme care in approaching the Soviet base -- -3=we don't know if any atomic bombs are armed yet. Take the -4=facility off-line and then destroy any atomic weapons that exist. - -[SCG10EB.INI] -1=Now that the complex has been infiltrated, the launch control centers must -2=be deactivated. Get your engineers to the control centers and deactivate -3=them before the missiles reach their targets.@@Enemy technicians can help -4=in locating the control centers if they are kept alive. - -[SCG11EA.INI] -1=Our assault on the USSR is underway, although our efforts are being -2=hindered by large pockets of soviet armor. To counter this we need to -3=move warships up the Volga river, but there is a bottleneck near -4=Volograd which you must clear so our naval vessels can move in. -5=Good Luck. - -[SCG11EB.INI] -1=Our assault on the USSR is underway, although our efforts are being -2=hindered by large pockets of soviet armor. To counter this we need to -3=move warships up the Volga river, but there is a bottleneck near -4=Volograd which you must clear so our naval vessels can move in. -5=Good Luck. - -[SCG12EA.INI] -1=Rumors abound that the Soviet Iron Curtain is nearing completion. In -2=addition, an even more powerful version of that weapon is also in the -3=works. One research facility is more protected than the rest - find out -4=why. Capture all technology centers, and destroy any -5=Iron Curtain prototype that you encounter.@Our newly developed Longbow -6=Helicopter should be able to assist your attacks. - -[SCG13EA.INI] -1=LANDCOM 16 HQS.@TOP SECRET.@TO: FIELD COMMANDER A9@@CONGRATULATIONS. -2=CAPTURING TECH CENTERS HAS REVEALED AN UNDERGROUND WEAPONS FACILITY. -3=PLACE EXPLOSIVE CHARGES ON ALL GENERATORS. RESULTING EXPLOSIONS SHOULD -4=DESTROY FACILITY.@GET OUT BEFORE NERVE GAS IS USED.@@TRANSMISSION ENDS. - -[SCG14EA.INI] -1=This is it -- the final confrontation! The Soviets have nowhere to run -2=now. The only thing that remains is to topple the Soviet seat of power. -3=Destroy everything to make sure that no one takes Stalin's place. -4=No sorrow. No pity. No remorse. - -[SCU01EA.INI] -1=A pitiful excuse for resistance has blockaded itself in this village. -2=Stalin has decided to make an example of them. Kill them all and destroy -3=their homes. You will have Yak aircraft to use in teaching these rebels -4=a lesson. - -[SCU02EA.INI] -1=Tomorrow, the attack on Germany begins, but today, we must protect our -2=facility from Allied attacks. Keep the Command Center intact at all -3=costs, and destroy any Allied fortification you might find. - -[SCU02EB.INI] -1=Tomorrow, the attack on Germany begins, but today, we must protect our -2=facility from Allied attacks. Keep the Command Center intact at all -3=costs, and destroy any Allied fortification you might find. - -[SCU03EA.INI] -1=An Allied spy has bypassed our security, damaged our base, and is now -2=seeking to escape. Use your attack dogs to track him down and exterminate -3=him. The civilians are aiding the spy and will have set traps for your -4=men. If the spy escapes you, your life is forfeit. - -[SCU04EA.INI] -1=The Allied base in this region is proving to be problematic. Your mission -2=is to take it out so that we can begin to move forces through this area. -3=As long as they have communications they will be able to call upon heavy -4=reinforcements. Crush their communications, and they should be easier to -5=remove. - -[SCU04EB.INI] -1=The Allied base in this region is proving to be problematic. Your mission -2=is to take it out so that we can begin to move forces through this area. -3=As long as they have communications they will be able to call upon heavy -4=reinforcements. Crush their communications, and they should be easier to -5=remove. - -[SCU05EA.INI] -1=Khalkis island contains a large quantity of ore that we need. The -2=Allies are well aware of our plans, and intend to establish their own -3=base there. See to it that they fail. In addition, capture their radar -4=center so we can track Allied activity in this area. - -[SCU06EA.INI] -1=There is a special cargo that needs to be transported to a nearby -2=Soviet base in the northeast. Make sure the trucks reach their -3=destination intact. Along the way, there is a bridge which the Allies -4=may have destroyed. If so, use the Naval options at your disposal. Our -5=attack subs will make short work of any Allied boats you discover. - -[SCU06EB.INI] -1=There is a special cargo that needs to be transported to a nearby -2=Soviet base in the northeast. Make sure the trucks reach their -3=destination intact. Along the way, there is a bridge which the Allies -4=may have destroyed. If so, use the Navy at your disposal. Our attack -5=subs will make short work of any Allied boats you discover. - -[SCU07EA.INI] -1=The Allies have infiltrated one of our nuclear reactors! They -2=have tampered with the core so that a meltdown is imminent within -3=30 minutes. They must not succeed! Enter the base and find any remaining -4=technicians. Guide them to the 4 coolant stations so they can activate -5=them, then activate the main computer. The security systems have been -6=armed so beware. Kill any Allies you find. - -[SCU08EA.INI] -1=We have detected Allied activity on Elba island. The Allies plan to use -2=this island to stage an attack on the Soviet Empire. You must ensure -3=that the island ceases to be under Allied control.@@Destroy all Allied -4=units on and around the island. The local population has been aiding the -5=Allies as well. There is only one punishment for helping the enemy - Death. - -[SCU08EB.INI] -1=We have detected Allied activity on Elba island. The Allies plan to use -2=this island to stage an attack on the Soviet Empire. You must ensure -3=that the island ceases to be under Allied control.@@Destroy all Allied -4=units on and around the island. The local population has been aiding the -5=Allies as well. There is only one punishment for helping the enemy - Death. - -[SCU09EA.INI] -1=The Allied forces have intercepted and destroyed a convoy that carried -2=parts for our secret weapon. One truck remains, but they have captured -3=that last truck and its cargo. This is not acceptable! You are to destroy -4=that truck before the Allies leave the area with it. - -[SCU10EA.INI] -1=You must defend a Soviet convoy that is moving through Allied occupied -2=territory. Using the new MIG jet and a complement of Yaks, get the convoy -3=through the area intact.@@Be careful -- your resources for this mission -4=are very limited. If at least one truck makes it through to the other -5=side, the mission will be a success. - -[SCU11EA.INI] -1=Intelligence indicates that a large portion of the Allied Naval Fleet -2=will stop for refueling at a base in this area. Destroy the fleet and the -3=base. Beware the long range of their cruisers. - -[SCU11EB.INI] -1=Intelligence indicates that a large portion of the Allied Naval Fleet -2=will stop for refueling at a base in this area. Destroy the fleet and the -3=base. Beware the long range of their cruisers. - -[SCU12EA.INI] -1=We have learned the location of the Chronosphere weapon, and we want to -2=capture it. @The Allies have boobytrapped the Chronosphere to explode -3=if approached. Capturing the tech. centers BEFORE taking the Chronosphere -4=may allow you to defuse any traps. Use extreme caution. - -[SCU13EA.INI] -1=We have another chance to capture the Chronosphere. Take out the Radar -2=Domes to cut the link between them and the Chronosphere. Then capture it! - -[SCU13EB.INI] -1=We have another chance to capture the Chronosphere. Take out the Radar -2=Domes to cut the link between them and the Chronosphere. Then capture it! - -[SCU14EA.INI] -1=Your final test is at hand. The destiny of the Soviet union rests on the -2=shores of England. Here lies the final resting place of the Allies pitiful -3=resistance. Crush them and attain your place at the right hand of Stalin. - ---cut here--- DO NOT INCLUDE THIS LINE!!! - - -[6-3] Red Alert Mission Tree -============================= - The original Red Alert missions had the following structure (we - present this mainly so you can use the SkipMapSelect variable without - too much of a hassle): - -[6-3-1] Allied Missions ------------------------- - level 1: - scg01ea - level 2: - scg02ea - level 3: - scg03ea - scg03eb - level 4: - scg04ea - level 5: - scg05ea - scg05eb - scg05ec - level 6: - scg06ea - scg06eb - level 7: - scg07ea - level 8: - scg08ea - scg08eb - level 9: - scg09ea - scg09eb - level 10: - scg10ea->scg10eb (in the original Red Alert missions, scg10eb starts - immediately after scg10ea is finished - - SkipMapSelect is set to yes) - level 11: - scg11ea - scg11eb - level 12: - scg12ea - level 13: - scg13ea - level 14: - scg14ea - -[6-3-2] Soviet Missions ------------------------- - level 1: - scu01ea - level 2: - scu02ea - scu02eb - level 3: - scu03ea - level 4: - scu04ea - scu04eb - level 5: - scu05ea - level 6: - scu06ea - scu06eb - level 7: - scu07ea - level 8: - scu08ea - scu08eb - level 9: - scu09ea - level 10: - scu10ea - level 11: - scu11ea - scu11eb - level 12: - scu12ea - level 13: - scu13ea - level 14: - scu14ea - -[6-3-3] Ant Missions ---------------------- - These four missions are only available with the Counterstrike patch. - level 1: - sca01ea - level 2: - sca02ea - level 3: - sca03ea - level 4: - sca04ea - - WARNING: if you use SkipMapSelect to add a new mission to the original - mission structure, you should make sure that the user understands the - following: if the user takes a savegame of the additional mission and - tries to restart it after they have removed your .ini file, Red Alert - will give the error "Unable to read scenario", and crash. If you are - putting in additional missions using SkipMapSelect, make sure the user - understands that, once they have gotten rid of your missions, that they - will only be able to load that savegame, not restart it. - - - -====================== --SECTION THREE- THEORY -====================== - ------------------------------ -CHAPTER [7] From The Lectern ------------------------------ - - 'From the Lectern' is a section intended to bring you some theory - about how to use aspects of Red Alert that may not, at first glance, - appear obvious to the reader. These are not meant to be step-by-step - guides in what you do to have your mission perform action X, but rather - to introduce your mind to some concepts that utilise the knowledge of - this guide in forms that go beyond the simplistic creation of units and - firing of triggers. At least, that is the hope. - -[7-1] Contributing to the Lectern -================================== - If you wish to contribute to 'From the Lectern', please email one of - the authors, at either "andrewg@light.iinet.net.au" or "cfhark@msn.com" - with the subject of 'For the Lectern'. Include both a short description - of what you are going to describe so that we can determine whether to - include it or not, and also the spell-checked text of your 'From the - Lectern' entry. - - Try to be as detailed as possible in your submissions. If you need to - refer to parts of external files such as the rules.ini file or a .mpr or - .ini file, do not include all of it. Just include those parts that are - directly referenced in your article. Articles that include massive - amounts of superfluous material will be subject to editing. - - -[7-2] How to get units appearing out of buildings -================================================== - You may have noticed that in some original Red Alert missions, that - units would run out of buildings. Here is the method to do just that. - If you are using transports to bring units onto the battlefield as - reinforcements, the usual reinforcements trigger looks something like: - blah,7,5,-1,20,blah - where 5 is the teamtype being reinforced, and 20 is the waypoint where - they are going to be dropped off. - However, if you want the units to appear from buildings, then your - trigger would look like this: - blah,7,5,-1,-1,blah - Now all you have to do is to make two further changes, both of which - are very easy. The first is to make an entry in the [Waypoints] section - of the cell in which you want the units to appear. The second is to - change the sixth teamtype value of this team to hold the new waypoint - number. - For example, if I wanted a team to appear at cell 8919, I might set - waypoint 11=8919, so the sixth number in that teamtype would be 11. - That's all, your team will now appear to be coming out of a building. - - I haven't managed to get the teamtype to appear out of nowhere; it - seems as though the presence of the building at the spot you want them - to appear from is a requirement. - - -[7-3] Changing Red Alert Values -================================ - When you load up Red Alert, it can look in a file called 'rules.ini' - to read in the values for just about everything in the game. However, - to make changes to these values by using the rules.ini file, you must - restart Red Alert to get them to take effect. - However, you can also place this information into your mission's ini - file, and each time the mission is started, these values will be read - from the mission's ini file and used. Be aware, however, that the - values you set in the mission's ini file do not carry over from one - mission to the next. - This is useful if you only want to make a few small changes, which you - can just add in for a single mission, and have Red Alert revert to the - original values for the other missions. All you have to do is add the - title of the section you want to change (eg [JEEP]), and then the - sections that you want to be altered for this mission. - For example, the following: - [JEEP] - Primary=FireballLauncher - will make all jeeps in that particular mission be armed with the flame - turret's weapon instead of the usual machine gun. - It seems as though you can include most of the sections in the - rules.ini file in a mission's ini file without problems. Be aware, - however, that each time a mission in started or restarted, that the - *entire* mission's ini file is read and decoded. For this reason, you - should only include those pieces of the rules.ini file that you want to - change. Don't do the following if you just want to change the jeep's - weapon: - [JEEP] - Prerequisite=weap - Primary=FireballLauncher - Strength=150 - Armor=light - TechLevel=3 - Sight=6 - Speed=10 - Owner=allies - Cost=600 - Points=20 - ROT=10 - Crewed=yes - While there is no noticeable change in the loading time of the - mission if you include even the entire rules.ini file into your - mission's ini file, trying to work out what you changed becomes - impossible. Feel free to include as much of the rules.ini as you want, - but this is one case where I prefer the minimalist approach. - - NOTE: One variable that has no effect in a mission's ini file is the - Image= variable. This can only be set correctly in the rules.ini file. - So, if you want to change what a unit looks like through the use of the - Image= variable, then you will have to supply a rules.ini file to set - this. Setting the Image= variable in a mission's ini file does nothing. - - -[7-4] How to control where reinforcements come from -==================================================== - You have already seen how to get reinforcement teamtypes appearing - from buildings, now we will discuss how to control the direction from - which teamtypes come from when you are reinforcing them from off - screen. If you simply set the waypoint at which the reinforcement is to - appear as some location on the map (that is not covered by a building), - then the teamtype will appear from the edge of the map that is closest - to their destination. However, if you want them to appear from some - other section of the map edge, then you have to do a little bit more - work. - The first thing you have to do is create a waypoint that is not on the - mission map. This waypoint should be in the row or column of cells that - is immediately outside of the mission map (ie say the mission map - started 34 cells from the left edge of the full map, the waypoint you - will use will be in the 33rd column of the full map). You can do this - easily by changing the X or Y value in the [Map] section by 1, loading - the map in the terrain editor, and determining the waypoint. When you - have determined the cell number that you want to use as a waypoint, - change the X or Y value back to its original value, and enter your new - waypoint. This new waypoint will be where the reinforcements will be - created, and from where they will make their way to their destination - waypoint. - - -[7-5] How to get units to enter buildings -========================================== - A number of infantry units have the ability to enter buildings - (thieves, engineers, Tanya etc), and these will enter buildings of their - own accord when given the order to attack. This allows them to enter - buildings that the player (or computer player) builds, the positions of - which you don't know at the time of creating the mission. But what if - you want something to happen to a particular building that exists on the - map at the beginning of the mission (or the position of which you know - because it will be built through the [Base] section)? - To get unit to enter a specific building, you give them the Attack at - waypoint command, specifying the waypoint that the anchor cell of the - building is located. If the infantry unit has the Infiltrate ability, - it will attempt to infiltrate that building. Be aware, however, that if - the specified building is an enemy building and the unit sent to - infiltrate it has a weapon, that it will use this weapon to attack the - building, rather than try and enter it. - You can, of course, have infantry units enter buildings that they - already own. This can be used to good effect to give the mission a more - dynamic feeling, if you feel that such would be necessary. You could, - for example, give some civilian units the Infiltrate ability and have - them walk in and out of buildings. - Spies, of course, should be given the Spy at waypoint command rather - than Attack at waypoint. - - -[7-6] Discussion on IQ Levels -============================== - Unlike the original C&C, Red Alert introduces some basic intelligence - to the computer players. This makes creating a computer opponent for a - single player mission both easier and more difficult than creating one - for C&C. More difficult because in C&C you controlled every single - aspect of the computer players. You can achieve this level of control - by setting the IQ level of the computer players to 0, but this means you - aren't able to use some of the features that IQ levels provide. - However, if you give the computer player a high level of IQ, then it - will begin to perform actions other than those that you are telling it - to perform. This lack of control makes fine tuning missions a - challenge. Setting a high IQ also means that you are able to get a - mission off the ground quicker, but my own personal preference is to - avoid doing this (although your view may differ). - - One of the good features of the rules.ini file (and the fact that you - are able to include pieces of it in your mission's ini file) is that you - are able to change what each of the IQ levels does. Here is the - original [IQ] entry in the rules.ini file, comments and all: - -; ******* IQ setting for computer activity ******* -; Each player (computer controlled or otherwise) is given an IQ rating that is used -; to control what the computer is allowed to automatically control. This is -; distinct from the difficulty setting. The higher the IQ setting, the more autonomous -; and intelligent the side will behave. Each ability is given a rating that -; indicates the IQ level (or above) that the ability will be granted. Because such -; abilities are automatically performed by the computer, giving a human controlled -; country a high IQ is not recommended. Otherwise the player's units will start to -; automatically "do their own thing"! A human controlled country is presumed to have -; an IQ rating of zero. A computer controlled country has an IQ of 1 or higher. -; When in skirmish mode or when multiplayer AIs are active, the computer IQ is set to -; the maximum. -[IQ] -MaxIQLevels=5 ; the maximum number of discrete IQ levels -SuperWeapons=4 ; super weapons are automatically fired by computer -Production=5 ; building/unit production is automatically controlled by computer -GuardArea=4 ; newly produced units start in guard area mode -RepairSell=1 ; allowed to choose repair or sell of damaged buildings -AutoCrush=2 ; automatically try to crush antogonists if possible -Scatter=3 ; will scatter from incoming threats [grenades and such] -ContentScan=4 ; will consider contents of transport when picking good target -Aircraft=4 ; automatically replace aircraft or helicopters -Harvester=2 ; automatically replace lost harvesters -SellBack=2 ; allowed to sell buildings - - As you can see, there are a number of items that you can use. For me, - the most useful seem to be the ones to automatically replace lost units. - The Production variable I see as more a curse than a blessing, as you - lose complete control over what the computer will produce - you may as - well be playing a game of skirmish at that level. Remember that you can - change these values in your ini file, so you may want to, for example, - change Aircraft to have an IQ level of 2. - - An area that high IQ levels may come in handy is when the computer - player is given access to various 'super weapons'. Instead of having to - program a specific trigger to fire the weapon (eg. firing a nuclear - missile), you would be able to supply them with enough intelligence to - fire it at their own discretion. Far be it from me to be cynical enough - to suggest that this form of intelligence may take the form of firing - the weapon as soon as it was available. - - -[7-7] On the use of Badger Bombers -=================================== - There are two uses for Badger bombers: reinforcing infantry units via - parachute drops, and to drop parachute bomblets. Both of these uses - will be discussed in this section. - - It does not appear that the ability to specify a waypoint in the - reinforcement trigger action is utilised when dealing with Badger - bombers. You can either leave it to Red Alert to determine from which - direction the bomber will come from, or you can use part 6 of the - teamtype to specify the waypoint at which you wish them to appear. - Remember, this waypoint should be outside of the mission map. This is - not 100% perfect however, but the bomber will appear within one or two - cells of the waypoint you specified (once it comes onto the map). - If you leave it up to Red Alert to determine where the bomber will - come in from, then you can use the sixth part of the teamtype to - determine where the bomber will drop its payload (whether it be infantry - units or bomblets). In this case, Red Alert will choose the edge - closest to the drop point, and make a bee-line to its target. If you do - leave it up to Red Alert to determine where to come from, then you do - not give the teamtype any actions. So, your teamtype would look like: - reinf=2,0,7,0,0,10,-1,2,E1:5,BADR:1,0 - (ie, the drop point will be waypoint 10, which is on the mission map; - Red Alert is left to determine where the plane comes from). - However, if you specify a waypoint off the mission map in the sixth - part of the teamtype, then you need to give the teamtype a command, in - this case, an Attack at waypoint command. Thus, your teamtype would - look like: - reinf=2,0,7,0,0,10,-1,2,E1:5,BADR:1,1,1:20 - (ie. the drop point will be waypoint 20, and the bomber should come from - waypoint 10, which is off the mission map). - Unfortunately, the Move to waypoint and Move to cell commands do not - work, for as soon as the bomber gets to the specified cell, it begins a - continual circling of that cell. - - Now that you know how to control where the bomber will come from, and - where it will drop its payload, we will discuss the types of payload a - bomber can carry. These payloads are infantry units and bomblets. - Infantry are dealt with in the ordinary way. You can have as many - different types of infantry units in a single bomber as you want, for - example, 6,E1:1,E2:1,E3:1,E7:1,C1:5,BADR:1 would be perfectly - acceptable. When dealing with sending in infantry reinforcements, there - doesn't seem to be a limit to the number of infantry units you can place - within a single bomber. - The infantry units will be dropped at the waypoint determined by one - of the methods shown above. - - To get a bomber to drop bomblets rather than infantry, all you have to - do is not give the bomber any payload. This means that the relevant - part of the teamtype will look like this: 1,BADR:1. In this case, the - bomber will drop its payload of bomblets at the specified waypoint. - - You can also get multiple bombers coming in just as easily as a single - bomber, but there is something you must be careful of when doing this - with infantry reinforcements. - When the bombers will just be dropping bomblets, nothing extra needs - to be done. All you need to do is to change the teamtype so that - instead of one Badger bomber being brought in, multiple are. Thus, the - relevant section of the teamtype would look like: 1,BADR:5 (to bring in - 5 Badger bombers). - However, if you want to use multiple bombers in a teamtype that will - be dropping infantry units, you will have to be careful. This is - because only one bomber will drop infantry. The rest will drop the - bomblets. They will do this at the same time, which usually results in - the immediate death of the infantry units. I have noticed, however, - that if the target cell of bombers is occupied by a building, that the - bombers carrying bombs will drop their load, but the infantry carrying - bomber will not. If the building gets destroyed by the rain of - bomblets, then the infantry carrier will loop back and drop the infantry - where the building was previously situated. Thus, if the teamtype had - the section: 2,E1:5,BADR:4, then one Badger bomber would carry the five - infantry units, whilst the other three would carry the bomblets. - - -[7-8] The Global Mission Timer -=============================== - When the timer has been stopped, using either timer extend or timer - shorten will start the timer again. If the use of timer shorten causes - the timer to expire, then any trigger associated with the timer expires - trigger event will be fired. - - The timer warnings are given automatically (ie. it will warn you at - 40 minutes, 30 minutes, 20 mintues etc), so there is no reason for you - to add a play speech trigger to play these warnings. - - If you want to set the timer but don't want it to start, then your - trigger must have both the set timer and the stop timer trigger events, - both of which should be activated at the same time. The stop timer - event must be the second of the two trigger events; if it isn't, the - timer will be stopped then have its time set (having its time set causes - the timer to start counting down). - - -[7-9] What is the Zone of a cell? -================================== - There appear to be two different forms of "zone" as they refer to - cells. Both of the two types depend on which cell is being used. There - are only two types of cells on the map: those that are passable by a - ground unit, and those that are not. - - If the cell being used to determe the "zone" is a passable cell, - then the zone of this cell will be that area of the map that a - ground-based unit can reach. So, if this was a totally blank map, the - "zone" of that cell would be the entire map. If this was a map that had - a cliff wall stretching from one side to the other, the "zone" would be - the half of the map that the cell is in. - Parts of the map like bridges (be they land bridges or concrete - bridges) are included in the category of passable land, so if a map was - separated by a river that had a bridge, the "zone" would be the entire - map, except for those parts of the river that are not passable by ground - units. - - The other type of "zone" is where the cell is part of a non-passable - section of land. If this is the case, then the "zone" of this cell will - be the non-passable sections of the map. This includes cliffs and - rivers, and water. Please note the difference between this and the - previous form of "zone", in that this form of "zone" will reveal all - non-passable sections of land, *even if* they are not connected to the - initial cell. That means that a piece of cliff face totally unconnected - to another piece of cliff face will be exposed. Rivers and sections of - water are also counted as part of this "zone". - - If you used the first type of "zone" for a Reveal zone of waypoint - trigger action, then the map cells that a ground unit can move to from - that cell will be revealed. This can potentially reveal a very large - amount of the map. - If you used the second type of "zone" for a Reveal zone of waypoint - trigger action, then all the non-passable map cells on the mission map - This means that all the cliff faces will be revealed, as will all - rivers, water sections etc. - - Remember that the terrain editor has a function that will show - whether each cell is passable or not. You can use that function to help - determine what makes up the "zone" for a particular cell. - - One use of the "zone" would be to determine whether the player has - landed some units on an island or not. This would be better than - putting celltriggers in all of the cells of the island that have an - Entered by event. - - -[7-10] Explaining Global Variables -=================================== - Why they're called globals, I don't know; Vegas-style programming - jargon perhaps. I think of them as flags (logical markers) which can - have one of two states: SET (1) or CLEAR (0). How many there can be, I - don't know, Westwood uses as many as thirty in some missions, which - seems plenty enough. - - All globals are clear until set. They may be set by either a trig (eg - 28,-1,-1,#) or a teamtype command (12:#), where # = a number, the name - of the global variable. They may be cleared only by a trig - (29,-1,-1,#). - - The trigger events 27 and 28 (Global is set... and Global is - clear...) are tests to check the state of the named global. (27,-1,#): - This trigger will fire if # is set. - - Example: - teamtype,etc,etc,3:9,3:5,12:15,3:8 - trig1=0,1,0,1,27,-1,15,0,-1,0,7,22,-1,-1,29,-1,-1,10 - When a member of the teamtype reaches waypoint 5, global 15 becomes - set and trig1 will fire, sending the reinforcements in and clearing - global 10. - - Every mission begins with all globals clear. - - -[7-11] When a Building Must Be Captured, Not Destroyed -======================================================= - In the original C&C, when we wanted to specify that a building needed - to be captured to win the mission, but the mission was lost if that - building was destroyed, we could use the Cap=Win/Des=Lose trigger - action. However, in Red Alert, this trigger action does not exist, but - we can easily create it with our own trigger. - - (thanks to Jaakko Nenonen for this trigger example) - capture=0,2,3,0,1,-1,2,7,-1,0,1,-1,-1,2,2,-1,-1,2 - - Then you just attach this to the building you want to be captured but - not destroyed (naturally, you would use the correct country number for - your real trigger). - - The above trigger equates to: - "if country 2 captures (Entered by trigger) the building, then win - action is fired for country 2" - OR - "if the building is destroyed by anyone, then the lose action is - fired for country 2" - - -[7-12] Using your own names -============================ - With the Counterstrike patch (v1.07), an additional useful section - has been added to the unit and structure sections of the rules.ini file - that allows you to change the name of that particular unit or - structure. It must be noted that this does not work with the original - version of Red Alert, only the patched version. - To change the name of a particular item, you either edit the - rules.ini or add this information into the mission's ini file. For - example, if you wanted to change the name of the light tank (1TNK), you - would have the following section: - [1TNK] - Name=Bradley - By putting these changes into your mission's ini file, you can change - the name of a unit for a single mission, and then have it revert to its - original name. - - -[7-13] Blowing up bridges -========================== - To blow up a bridge, you need to do two things: first, you need to - place the celltriggers on the area of the map that covers the section - of the bridge that you want to blow up. Secondly, you must create a - set of triggers - one to detonate the bridge and another to force this - trigger. Having the bridge detonation trigger on a time trigger event - does not seem to work - I can only get bridges to blow up when the - trigger is forced. - - You can decide to either damage a bridge, or blow it up completely. - This is accomplished by using a single Destroy attached... trigger, or - using two of them. For example, the following trigger will only - damage a bridge: - brid=0,7,0,0,0,-1,0,0,-1,0,32,-1,-1,-1,0,-1,-1,-1 - while the following trigger will blow up the bridge completely: - brid=0,7,0,1,0,-1,0,0,-1,0,32,-1,-1,-1,32,-1,-1,-1 - - -[7-14] Advanced Editing: Just how extensible is Red Alert? -=========================================================== - When it comes to creating campaigns for Red Alert, is the rules.ini - file really enough for what you need, or do you feel the need to add - your own special touch to Red Alert? In the following paragraphs, I - will discuss various items I have been able to edit for Red Alert that - goes well beyond what the rules.ini file allows. Indeed, as I - discovered these things, I was left pondering the question: just how - extensible is Red Alert? - - The first, and most important bit of knowledge you should have is - that Red Alert can read the C&C-style .mix files. This is important - because the C&C-style .mix file headers are understood, which allows the - placement and replacement of files, while the Red Alert-style .mix file - headers are not understood. To do most of the following pieces of - editing for your campaign, you will need one of the utilities that allow - you to create your own .mix files. There are, as far as I know, only - two such programs, ccmix and mixmaker. If you do a search for 'ccmix' - on HotBot (http://www.hotbot.com), it should return a list of 6 or so - sites, one of which contains this file. - - To have Red Alert recognise that you want it to use your new .mix - file, you need to give the .mix file a particular name. This name has - the format sc*.mix (and apparently also ss*.mix), where * is replaced - by up to 6 letters or digits. You then place this new .mix file in - your Red Alert directory, and Red Alert will be able to utilise any - data you place in it. It is common to use the filenames sc-001.mix, - sc-002.mix etc (up to sc-999.mix). If you use these names, you can - be certain that the information in the higher numbered mix file will - be used if it ia also contained within a lower number mix file (eg. a - file called scu01ea.ini appearing in sc-812.mix will not be used if - a similarly named file appears in sc-890.mix). - - For most Red Alert campaign creators, you will want to use the basic - functionality that these sc*.mix files provide. If you place your new - .ini files into one of these .mix files, when Red Alert goes to play - that mission, it will use the ini file from your .mix file, rather than - that of the original mission. If your mission contains many mission - files, it is much cleaner to supply one .mix file for the user to use. - However, if you are just supplying one or two missions, I wouldn't - bother. You should always remember to stick to the correct naming - conventions for the new ini files. Unfortunately, it does not appear - that the file tutorial.ini gets read from your .mix file, so if your - campaign uses new text from a tutorial.ini file, you will still have to - supply that separately. Nor does the mission.ini file get read, so that - must also be supplied separately. - - To those people that want to go the extra mile, these .mix files can - contain more than just the various mission ini files of your campaign. - They can also contain .shp and .aud files. This is the method that you - can use to give the civilian buildings V20 to V37 that don't originally - have a set of graphics some graphics of their own. - - Normally when you want to place a .shp file to replace the graphics - of a unit or building you give it the extension .shp. However, civilian - buildings are slightly different. The graphics for civilian buildings - are normally stored in the snow.mix or temperat.mix files, rather than - the normal conquer.mix (inside the main.mix file). To replace the - graphics of a civilian building, you must give it an extension related - to the theater it will appear in. For the Temperate theater, this - extension is '.tem'; for the Snow theater, this extension is '.sno' (I - would imagine that the extension for the Interior theater is '.int', but - haven't tested that). For example, if I wanted to provide a graphic for - civilian structure V23 for the Temperate theater, the file I would add - to my .mix file would have the filename of 'V23.tem'. - - For non-civilian buildings, the files you add have the extension - '.shp'. Say I was going to add a graphic called ANDR that I could then - call from the rules.ini file. If I didn't intend this structure to be - buildable, then I would just add the file 'andr.shp' to the .mix file. - However, if I wanted this to be used on a structure that gets build, - then I should also include a file called 'andrmake.shp'. This file - contains the graphics that Red Alert will use during the 'building up' - phase after the structure is placed. If this file does not exist, when - the structure using the ANDR graphic is placed, it will just suddenly - appear (which does not look good). Finally, if I wanted the user to be - able to build this structure, I should also include the file - 'andricon.shp', which contains the graphic that Red Alert uses for the - icon. If this file isn't supplied, the cell in the sidebar where this - icon would normally be displayed will be blank, and suffer from - 'bleeding' from the other graphics. I do not know how Red Alert - differentiates between the DOS and Windows95 icons. The same is done - for vehicles, ships and infantry that you want to replace (although they - only need the base graphic and the icon graphic). The base graphic must - have a maximum 4 letter title (CFH will work but CFHAR will not). - Construction graphics (for buildings) take this base name and add MAKE - to the end, while icon graphics take the base name and add ICON to the - end. - - Special Note: the graphics for the hidden pillbox and the missile - silo are also theater-specific, so they must be treated as you would - when replacing civilian building graphics. ie to replace the graphic - for a missile silo in the temperate theater with a graphic called BANG, - you would need to include the file bang.tem, bangmake.tem, and - bangicon.shp. Yes, the icon has the .shp extension. - - One final note on replacing graphics: your new graphics should be as - close to the original size of the building as possible, otherwise - graphics clipping problems occur. You will have to work out what size - you can use for yourself. You should also keep the number of frames - of animation in your new graphic the same as of the original graphic. - - Thanks to Vladan Bato, we have a utility that can convert .wav files - to C&C-style .aud files. This means that you can create your own .aud - files, and place them in your .mix files. If you look in section [5-3] - Available Red Alert Speeches you will see the list of .aud files that - Red Alert uses to inform you of certain occurances. By placing your own - .aud files with the same name as the original (eg say I wanted to - replace the original "Mission accomplished" speech, I would put a file - called 'misnwon1.aud' in my .mix file), you can get Red Alert to use - your .aud files instead of the original ones. - - In addition, it is possible to change the responses of the various - units by placing the correctly-named .aud file into your .mix file. For - example, if I recorded and converted James Bond saying "Shaken, not - stirred", I could get the spy to say that by placing the file - 'sking1.aud' (this would replace the "For king and country" response of - the spy). See Section [5-4] Available Red Alert Sound Effects for the - filenames (in the Abbrev. column) that you would need to replace. I am - unsure of whether all the entries in that table use the .aud format that - Vladan's program supports, but at the very least the infantry responses - do. Hmm, can't wait for the Simpson's Red Alert add-on :) - - It may also be possible to replace the songs in Red Alert with your - own music. I have only tried this with replacing the AWAIT soundtrack - (as it doesn't originall appear), and this worked (ie I placed the file - await.aud in my .mix file). I am unsure of whether the other songs can - be replaced by placing the specified file in your .mix file (you will - have to work this out for yourself). - - You can replace even the videos in Red Alert, although you cannot add - new ones apparently. I am talking about the .vqa videos, not the .wsa - animations (I have not tested whether .wsa animations can also be - replaced, but I would guess that they could). To do this, you simply - place a .vqa file in your .mix file that has the same name as the - abbreviation of the movie (see Available Red Alert Movies for this - listing). I do not know whether there is a .vqa encoder available at the - current moment, nor do I know whether Red Alert's vqa format is the same - as that of C&C's vqa format (you can use C&C videos in Red Alert, but - the palette is so different as to make this pointless). - - Looking back, it seems as though pretty much everything in Red Alert - can be replaced by using a custom-made mix file. The question is: what - else can be changed? Really, only the actual map graphics themselves - are left to be seen if they can be changed. I do not know if this can - be done, but if it can, Red Alert can be seen in an entirely new light. - Perhaps unknowingly, we have been given a program that is almost - infinitely extensible. - - -[7-15] Remote detonation - the cell of death -============================================= - If you are looking at the Counterstrike ant missions and wondering - how Westwood created the mission where you gas the various nest sites, I - will now explain how you can get this same functionality (ie killing - things if they move into certain areas). To do this, you use an - ingenious function of a celltrigger that I had not even thought of being - possible. - - What you want to do is create what I will call the kill trigger. - This is the trigger that will kill everything that walks over it. It - has the form: - kill=2,0,0,0,1,-1,10,0,-1,0,32,-1,-1,-1,0,-1,-1,-1 - - It needs, as its trigger event, an 'Enters by' event, although you - would naturally change the country number. You could then use the free - second trigger event to hold any other event you want, such as a 'global - is set' event. The trigger action, as you will notice, is a destroy - attached item. This is what does the killing for you. - - When any unit (of the specified country) enters this cell, it will - die! Simple as that. You just place these triggers around your map - where you want your 'zones of death' to be, and you are set. - Apparently, Red Alert treats units that activate an 'entered by' trigger - the same, when it comes to the destruction function, as if those units - had a destroy trigger manually attached. - - However, you need to know that units in the cell at the time when it - is activated will not die (at least not until they enter another cell - of death). Only units that actively enter the cell will be killed. - So, a tank sitting in the cell when it is turned on will not get killed, - but anything else entering the cell will be. You will need to carefully - think about the placement of the death zones if you want to kill - everything. - - -[7-16] Getting units to destroy bridges via teamtypes -====================================================== - If you don't want to blow up bridges via triggers, you can always get - the computer units to do this. All you need to do is place a waypoint - on the part of the bridge that the units are to attack, and give the - particular teamtype an 'attack waypoint' command. You should give the - teamtype an additional command after this 'attack waypoint' command, so - that the units in this team don't continue to attack a destroyed - bridge. This additional command can be anything, including further - commands to destroy another bridge. This command will not be initiated - until the 'attack waypoint' command is completed; in this case it won't - be completed until the bridge has been destroyed. - - So your teamtype would have something like (assuming waypoint 20 is - on a bridge) ,1:20,0:1, which would have the teamtype - attack the bridge until it is destroyed, and would then go and attack - enemies somewhere else on the map. - - However, I have not managed to get the Tanya (E7) unit to attack a - bridge with the C4. When given the 'attack waypoint' command, the Tanya - unit uses her pistols instead of the C4. - - One very useful attribute of getting units to attack bridges is that - they are smart enough to not attack a bridge that has already been - destroyed. This is very useful if you have teamtypes attempting to - destroy multiple bridges. You do not need to be concerned about the - units in the teamtype attacking a section of river that used to be a - bridge before it was destroyed by another teamtype. - - -========================= --SECTION FOUR- APPENDICES -========================= - --------------------------- -CHAPTER [8] Items To Fill --------------------------- - The following parts need to be filled in, or made clearer: - [Basic] Section (1 item) - Percent - Country Specific Information (2 items) - MaxUnits, MaxInfantry, MaxBuilding, MaxVessel - [STRUCTURES] Section (1 item) - ??? (second last item in entry) - [SMUDGE] Section (1 item) - cell2 - Available Trigger Events (3 items) - Thieved by - Crosses horizontal line - Crosses vertical line - Available Trigger Actions (1 items) - Add repeating special weapon - [TeamType] Section (1 item) - More information needed on the effects of the various numbers - Available TeamType Actions (2 items) - Attack Tarcom - Spy on building @ waypoint - - - -------------------------------- -CHAPTER [9] Internet Resources -------------------------------- - -[9-1] Third Party Programs -=========================== - A beta release of a map editor, called RACK, has been released. It - is still very early in production, and has certain limitations. - - -[9-2] WWW Pages -================ - http://www.geocities.com/TimesSquare/5458 - Random Particles of Inspiration - The official site of the Single Player Mission Creation Guide. - - http://www.geocities.com/TimesSquare/Arcade/5553 - Contains information about the RA file format, including [MapPack] - and [OverlayPack] encoding. Home of the RACK map editor. - - http://www.geocities.com/SiliconValley/8682 - This is Vladan Bato's homepage, and contains the AUD conversion - programs, as well as the mix file editor for C&C (not for RA). - - ------------------------------- -CHAPTER [10] Revision History ------------------------------- - v1.0 March 5, 1997. - First version of the guide. - - v1.1 May 28, 1997. - Major revisions. Numerous spelling errors corrected. Many - sections updated and a few new sections added. Changes wrought - by the Counterstrike add-on are included. - diff --git a/doc/aud format.txt b/doc/aud format.txt deleted file mode 100644 index c2b3890e42..0000000000 --- a/doc/aud format.txt +++ /dev/null @@ -1,229 +0,0 @@ - - THE AUD FILE FORMAT - -Revision 3 - -by Vladan Bato (bat22@geocities.com) - - -In this document I'll try to describe the AUD file format used in -Command & Conquer and Redalert. - -Command & Conquer is a trademark of Westwood Studios, Inc. -Command & Conquer is Copyright (C)1995 Westwood Studios, Inc. -Command & Conquer: Red Alert is a trademark of Westwood Studios, Inc. -Command & Conquer: Red Alert is Copyright (C)1995,1996 Westwood Studios, Inc. - -The information provided here is for anyone who would like to make an -AUD player program or AUD to WAV or WAV to AUD converters. - -Most information about AUD files and IMA-ADPCM compression has been -provided by Douglas McFadyen. - -I won't explain here the format of the WAV files. You'll have to find this -info yourself. I'll just tell you how to obtain 16-bit PCM data and how -to encode it. - -I will use Pascal-like notation throughout this document. - -=============================== - 0. IMPRTANT NOTE - WHAT'S NEW -=============================== - -This revision contains an important difference in the IMA-ADPCM compression -routine. Instead of computing the diffrence between the current and -previous sample, it computes the difference between the current sample -and the value that the decoding routine will predict for the previous -sample. -This is the way the algorithm is implemented in C&C. -If you implement it the way it was in previous revisions of this document, -the sound will be the same but there will be a "pop" sound at the end. - - -============== - 1. AUD FILES -============== - -The AUD files have the following header : - - Header : record - SamplesPerSec : word; {Frequency} - Size : longint; {Size of file (without header)} - OutSize : longint; {Size of ouput data} - Flags : byte; {bit 0=stereo, bit 1=16bit} - Typ : byte; {1=WW compressed, 99=IMA ADPCM} - end; - -There are two types of compression. The first is the IMA-ADPCM compression -used for 16-bit sound. It's used in most AUD files. - -The other one is a Westwood's proprietary compression for 8-bit sound and -is used only for death screams. I won't describe it in this document -because I don't know how it works. - -The rest of the AUD files is divided in chunks. These are usually 512 -bytes long, except for the last one. - -Each chunk has the following header : - - ChunkHd : record - Size : word; {Size of compressed data} - OutSize : word; {Size of ouput data} - ID : longint; {Always $0000DEAF} - end; - -The IMA-ADPCM compression compresses 16-bit samples to 4 bits. This means -that OutSize will be apporximately 4*Size. - -The IMA-ADPCM compression and decompression are described in the following -sections. - -Note that the current sample value and index into the Step Table should -be initialized to 0 at the start and are mantained across the chunks -(see below). - -========================== - 2. IMA-ADPCM COMPRESSION -========================== - -I won't describe the theory behind the IMA-ADPCM compression. I will just -give some pseudo code to compress and decompress data. - -The compression algorithm takes a stream of signed 16-bit samples in input -and produces a stream of 4-bit codes in output. -The 4-bit codes are stored in pairs (two codes in one byte). The first one -is stored in the lower four bits. - -Two varaibles must be mantained while compressing : the previous sample -value and the current index into the step table. - -You can find the Step Table in Appendix B. -The Index adjustment table is in Appendix A. - -Here's the pseudo-code that will do the compression : - - Index:=0; - Prev_Sample:=0; - - while there_is_more_data do - begin - Cur_Sample:=Get_Next_Sample; - Delta:=Cur_Sample-Prev_Sample; - if Delta<0 then - begin - Delta:=-Delta; - Sb:=1; - end else Sb:=0; - {Sb is bit 4 of the output Code (sign bit)} - - Code := 4*Delta div Step_Table[Index]; - if Code>7 then Code:=7; - {These are the 3 low-order bits of output code} - - Index:=Index+Index_Adjust[Code]; - if Index<0 then Index:=0; - if Index>88 the Index:=88; - - Predicted_Delta:=(Step_Table[Index]*Code) div 4 + - Step_Table[Index] div 8; - - {This is the Delta that decoding routine will compute} - - Prev_Sample:=Prev_Sample+Predicted_Delta; - if Prev_Sample>32767 then Prev_Sample:=32767 - else if Prev_Sample<-32768 then Prev_Sample:=-32768; - - {Prev_Sample is the sample value that the decoding routine - will compute} - - - Output_Code(Code+Sb*8); - end; - -Note that this code is usually implemented in more efficient manner -(No need to divide). - -The Get_Next_Sample function should return the next sample from the input -buffer. -The Output_Code function should store the 4-bit code to the output buffer. -One byte contains two 4-bit codes, and this function should take care of -this. - -============================ - 3. IMA-ADPCM DECOMPRESSION -============================ - -It is the exact opposite of the above. It receives 4-bit codes in input -and produce 16-bit samples in output. - -Again you have to mantain an Index into the Step Table an the current -sample value. - -The tables used are the same as for compression. - -Here's the code : - - Index:=0; - Cur_Sample:=0; - - while there_is_more_data do - begin - Code:=Get_Next_Code; - - if (Code and $8) <> 0 then Sb:=1 else Sb:=0; - Code:=Code and $7; - {Separate the sign bit from the rest} - - Delta:=(Step_Table[Index]*Code) div 4 + Step_Table[Index] div 8; - {The last one is to minimize errors} - - if Sb=1 then Delta:=-Delta; - - Cur_Sample:=Cur_Sample+Delta; - if Cur_Sample>32767 then Cur_Sample:=32767 - else if Cur_Sample<-32768 then Cur_Sample:=-32768; - - Output_Sample(Cur_Sample); - - Index:=Index+Index_Adjust[Code]; - if Index<0 then Index:=0; - if Index>88 the Index:=88; - end; - -Again, this can be done more efficiently (no need for multiplication). - -The Get_Next_Code function should return the next 4-bit code. It must -extract it from the input buffer (note that two 4-bit codes are stored -in the same byte, the first one in the lower bits). - -The Output_Sample function should write the signed 16-bit sample to the -output buffer. - -========================================= - Appendix A : THE INDEX ADJUSTMENT TABLE -========================================= - - Index_Adjust : array [0..7] of integer = (-1,-1,-1,-1,2,4,6,8); - -============================= - Appendix B : THE STEP TABLE -============================= - - Steps_Table : array [0..88] of integer =( - 7, 8, 9, 10, 11, 12, 13, 14, 16, - 17, 19, 21, 23, 25, 28, 31, 34, 37, - 41, 45, 50, 55, 60, 66, 73, 80, 88, - 97, 107, 118, 130, 143, 157, 173, 190, 209, - 230, 253, 279, 307, 337, 371, 408, 449, 494, - 544, 598, 658, 724, 796, 876, 963, 1060, 1166, - 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, - 3024, 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, - 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289, - 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 ); - - ---- - -Vladan Bato (bat22@geocities.com) -http://www.geocities.com/SiliconValley/8682 - diff --git a/doc/cncff.txt b/doc/cncff.txt deleted file mode 100644 index f025a3ed50..0000000000 --- a/doc/cncff.txt +++ /dev/null @@ -1,625 +0,0 @@ - COMMAND & CONQUER FILE FORMATS - -Revision 4 - -by Vladan Bato (bat22@geocities.com) - -This document explains the file formats used by Command & Conquer. - -Command & Conquer is a tradmark of Westwood Studios, Inc. -Command & Conquer is Copyright (C)1995 Westwood Studios, Inc. - -The information provided here is meant for programmers that want to make -editor and utilites for Command & Conquer. My explanation might not be -the best one, but it should be enough. - -I can't guarantee that the information in here is correct. If you find any -errors, please report them to me. - -In this document I'll use Pascal notation, and any code samples will be in -Pascal.... -I wanted to rewrite them in C, but I don't have the time to test the code. -So, to avoid any risks, I'll use the code from Mix Manager. - -In case you don't know, the information contained here has been used to -make the program Mix Manager, which contains a lot of conversion utilities -for the various formats. For more info, check my homepage (see the end of -the document). - -=================== - 1. THE .MIX FILES -=================== - -You probably already know the format of these files, but I will add a -description here for completeness. - -The MIX file consists of two parts : --A header including the index of all the files contained within --A body containing all the files - -It's format is : - - Header : record - NumFiles : word; {Number of files in MIX} - DataSize : longint; {Size of body} - Index : array [1..NumFiles] of - record - ID : longint; {File ID} - Start : longint; {Offset of file from the start of the -body} - Size : longint; {file size} - end; - end; - -The ID field is computed from the original filename, which is not stored in -the MIX. -The records are always sorted by the ID field (the numbers are signed -longints). -Note that the offsets are relative to the start of the body so to find the -actual offset in the MIX you have to add the size of the header which is -NumFiles*12+6 - -=================== - 2. THE .PAL FILES -=================== - -The most easiest files.... -These files contain the palette in the same format used by VGA cards. - - Palette : array [0..255] of record - red,green,blue:byte; - end; - -Note that only the first 6 bits of each number are used, giving a total of -262144 possible colors (as opposed to the 8 bits used by .PCX files for -example). - -================================= - 3. THE TEMPLATE AND .BIN FILES -================================= - -The Template files contain the map graphics, and can be found in the -theater specific MIX files (TEMPERAT.MIX, WINTER.MIX, DESERT.MIX). -The .BIN files contain the maps for the missions and are used in conjunction -with the .INI files. - -I won't explain them here. They are explained with great detail in the -document titled "Command & Conquer maps" I wrote some time ago. -The said document can be found on my homepage. - -=================== - 5. THE .SHP FILES -=================== - -The .SHP files contain almost all the graphics : units, structures, -trees,... -The header has the following structure : - - Header : record - NumImages : word; {Number of images} - A,B : word; {Unknown} - Width, - Height : word; {Width and Height of the images} - C : longint; {Unknown} - end; - -If you know something about those unknown fields, please e-mail me. -Following that there's an array of records, one for each image : - - Offsets : array [0..NumImages+1] of - record - Offset : longint; {Offset and format of image in file} - RefOffs : longint; {Offset and format of image on - which it is based} - end; - -The most significant byte (last) of the Offset and RefOffs fields -contains the format, while the lower three are used for the offset. -The format byte can have one of the three values : 80h, 40h, 20h. -I will call the three image formats Format80, Format40 and Format20. - -The Format80 images are compressed with a compression method I'll explain -later. - -The Format40 images must be xor-ed with a Format80 image. That's what the -RefOffs field is used for. It tells which Format80 image they are -based upon. The Format40 will be explained in detail later. - -The Format20 images use the same format as the Format40, the difference is -that they are xor-ed with the image that precedes them in the file. That can -be either in Format20 or in Format40. -The offset part of the RefOffs field contains the number of the first -Format40 image in the chain, and the format field is always 48h. - -Here's an example : - -0) Off0(three bytes) 80h 000000h 00h -1) Off1(three bytes) 80h 000000h 00h -2) Off2(three bytes) 40h Off1 80h -3) Off3(three bytes) 80h 000000h 00h -4) Off4(three bytes) 40h Off1 80h -5) Off5(three bytes) 20h 000400h 48h -6) Off6(three bytes) 20h 000400h 48h -7) Off7(three bytes) 40h Off3 80h - -For example to draw image 7, you have to draw the image 3 first (whose -offset -and format are given) and then xor image 7 over it. - -To draw image 6, you have to xor it over the previous image, i.e. 5, which -is format20 again, that means that it has to be xor-ed over image 4, which -is in format40, i.e. it must be xor-ed over the image in format80 it has a -reference to. In this case it's image 1. Thus the chain is 1,4,5,6. -This is one way to see it, the other could be : -Image 6 is in Format20, the RefOffs field contains the number of the first -Format40 image in the chain, in this case image 4. To draw Image 4, the -Image 1 has to be drawn first, next is image 4, and then all the images -from the 4th to the 6th have to be xor-ed over the previous. - -I made some experiments and found out that you don't have to use the -Format40 and Format20 images. I tried converting all of them into Format80 -and it worked. - -Also, when changing graphics, note that all the unit and structure graphics -should be drawn using the GDI colors, which will be automatically converted -for the other sides. -The palette you should use is one of those found in DESERT.MIX, WINTER.MIX -and TEMPERAT.MIX. The GDI colors are colors 0B0h-0BFh. The other colors -won't be converted and will remain the same for all the sides (be sure to -use only the colors that are the same all three palettes). - -The above applies only to the graphics that appear in all three theaters -(the .SHP file found in CONQUER.MIX). The graphics for the structures and -overlays that appear in a single theater (found inside the theater specific -MIX) can use the palette entries that are unique for that theater (and will -be shown with garbled colors in the others). - -Also a special color is used for shadows. It's color 04h. In the palettes -it's bright green, but C&C puts a shadow instead of it. I don't know how -the shadows are calculated however. - -You should've noticed that the array has NumImages+2 elements when only -NumImages elements are needed. The last one contains zeros, and the one -before -that points to the end of the file. These two can be used to identify the -file as a .SHP. - -Here's the description of the compression formats : Format80 and Format40. - ----------- - Format80 ----------- - -There are several different commands, with different sizes : form 1 to 5 -bytes. -The positions mentioned below always refer to the destination buffer (i.e. -the uncompressed image). The relative positions are relative to the current -position in the destination buffer, which is one byte beyond the last -written -byte. - -I will give some sample code at the end. - -(1) 1 byte - +---+---+---+---+---+---+---+---+ - | 1 | 0 | | | | | | | - +---+---+---+---+---+---+---+---+ - \_______________________/ - | - Count - - This one means : copy next Count bytes as is from Source to Dest. - -(2) 2 bytes - +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ - | 0 | | | | | | | | | | | | | | | | | - +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ - \___________/\__________________________________________________/ - | | - Count-3 Relative Pos. - - This means copy Count bytes from Dest at Current Pos.-Rel. Pos. to - Current position. - Note that you have to add 3 to the number you find in the bits 4-6 of the - first byte to obtain the Count. - Note that if the Rel. Pos. is 1, that means repeat Count times the -previous - byte. - -(3) 3 bytes - +---+---+---+---+---+---+---+---+ +---------------+---------------+ - | 1 | 1 | | | | | | | | | | - +---+---+---+---+---+---+---+---+ +---------------+---------------+ - \_______________________/ Pos - | - Count-3 - - Copy Count bytes from Pos, where Pos is absolute from the start of the - destination buffer. (Pos is a word, that means that the images can't be - larger than 64K) - -(4) 4 bytes - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+ - | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | | | | | | - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+ - Count Color - - Write Color Count times. - (Count is a word, color is a byte) - -(5) 5 bytes - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+-------+ - | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | | | | | | - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+-------+ - Count Pos - - Copy Count bytes from Dest. starting at Pos. Pos is absolute from the -start of the Destination buffer. - Both Count and Pos are words. - -These are all the commands I found out. Maybe there are other ones, but I -haven't seen them yet. - -All the images end with a 80h command. - -To make things more clearer here's a piece of code that will uncompress the -image. - - DP = destination pointer - SP = source pointer - Source and Dest are the two buffers - - - SP:=0; - DP:=0; - repeat - Com:=Source[SP]; - inc(SP); - b7:=Com shr 7; {b7 is bit 7 of Com} - case b7 of - 0 : begin {copy command (2)} - {Count is bits 4-6 + 3} - Count:=(Com and $7F) shr 4 + 3; - {Position is bits 0-3, with bits 0-7 of next byte} - Posit:=(Com and $0F) shl 8+Source[SP]; - Inc(SP); - {Starting pos=Cur pos. - calculated value} - Posit:=DP-Posit; - for i:=Posit to Posit+Count-1 do - begin - Dest[DP]:=Dest[i]; - Inc(DP); - end; - end; - 1 : begin - {Check bit 6 of Com} - b6:=(Com and $40) shr 6; - case b6 of - 0 : begin {Copy as is command (1)} - Count:=Com and $3F; {mask 2 topmost bits} - if Count=0 then break; {EOF marker} - for i:=1 to Count do - begin - Dest[DP]:=Source[SP]; - Inc(DP); - Inc(SP); - end; - end; - 1 : begin {large copy, very large copy and fill commands} - {Count = (bits 0-5 of Com) +3} - {if Com=FEh then fill, if Com=FFh then very large copy} - Count:=Com and $3F; - if Count<$3E then {large copy (3)} - begin - Inc(Count,3); - {Next word = pos. from start of image} - Posit:=Word(Source[SP]); - Inc(SP,2); - for i:=Posit to Posit+Count-1 do - begin - Dest[DP]:=Dest[i]; - Inc(DP); - end; - end - else if Count=$3F then {very large copy (5)} - begin - {next 2 words are Count and Pos} - Count:=Word(Source[SP]); - Posit:=Word(Source[SP+2]); - Inc(SP,4); - for i:=Posit to Posit+Count-1 do - begin - Dest[DP]:=Dest[i]; - Inc(DP); - end; - end else - begin {Count=$3E, fill (4)} - {Next word is count, the byte after is color} - Count:=Word(Source[SP]); - Inc(SP,2); - b:=Source[SP]; - Inc(SP); - for i:=0 to Count-1 do - begin - Dest[DP]:=b; - inc(DP); - end; - end; - end; - end; - end; - end; - until false; - -Note that you won't be able to compile this code, because the typecasting -won't work. (But I'm sure you'll be able to fix it). - - ----------- - Format40 ----------- - -As I said before the images in Format40 must be xor-ed over a previous -image, or against a black screen (as in the .WSA format). -It is used when there are only minor changes between an image and a -following one. - -Here I'll assume that the old image is in Dest, and that the Dest pointer is -set to the beginning of that buffer. - -As for the Format80, there are many commands : - - -(1) 1 byte - byte - +---+---+---+---+---+---+---+---+ - | 1 | | | | | | | | - +---+---+---+---+---+---+---+---+ - \___________________________/ - | - Count - - Skip count bytes in Dest (move the pointer forward). - -(2) 3 bytes - byte word - +---+---+---+---+---+---+---+---+ +---+-----+-------+ - | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 0 | ... | | - +---+---+---+---+---+---+---+---+ +---+-----+-------+ - \_____________/ - | - Count - - Skip count bytes. - -(3) 3 bytes - byte word - +---+---+---+---+---+---+---+---+ +---+---+-----+-------+ - | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 0 | ... | | - +---+---+---+---+---+---+---+---+ +---+---+-----+-------+ - \_____________/ - | - Count - - Xor next count bytes. That means xor count bytes from Source with bytes - in Dest. - -(4) 4 bytes - byte word byte - +---+---+---+---+---+---+---+---+ +---+---+-----+-------+ +-------+ - | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 1 | ... | | | | - +---+---+---+---+---+---+---+---+ +---+---+-----+-------+ +-------+ - \_____________/ value - | - Count - - Xor next count bytes in Dest with value. - -5) 1 byte - byte - +---+---+---+---+---+---+---+---+ - | 0 | | | | | | | | - +---+---+---+---+---+---+---+---+ - \___________________________/ - | - Count - - Xor next count bytes from source with dest. - -6) 3 bytes - byte byte byte - +---+---+---+---+---+---+---+---+ +-------+ +-------+ - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | - +---+---+---+---+---+---+---+---+ +-------+ +-------+ - Count Value - - Xor next count bytes with value. - - -All images end with a 80h 00h 00h command. - -I think these are all the commands, but there might be some other. -If you find anything new, please e-mail me. - -As before here's some code : - - DP = destination pointer - SP = source pointer - Source is buffer containing the Format40 data - Dest is the buffer containing the image over which the second has - to be xor-ed - - - SP:=0; - DP:=0; - repeat - Com:=Source[SP]; - Inc(SP); - - if (Com and $80)<>0 then {if bit 7 set} - begin - if Com<>$80 then {small skip command (1)} - begin - Count:=Com and $7F; - Inc(DP,Count); - end - else {Big commands} - begin - Count:=Word(Source[SP]); - if Count=0 then break; - Inc(SP,2); - - Tc:=(Count and $C000) shr 14; {Tc=two topmost bits of count} - - case Tc of - 0,1 : begin {Big skip (2)} - Inc(DP,Count); - end; - 2 : begin {big xor (3)} - Count:=Count and $3FFF; - for i:=1 to Count do - begin - Dest[DP]:=Dest[DP] xor Source[SP]; - Inc(DP); - Inc(SP); - end; - end; - 3 : begin {big repeated xor (4)} - Count:=Count and $3FFF; - b:=Source[SP]; - Inc(SP); - for i:=1 to Count do - begin - Dest[DP]:=Dest[DP] xor b; - Inc(DP); - end; - end; - end; - end; - end else {xor command} - begin - Count:=Com; - if Count=0 then - begin {repeated xor (6)} - Count:=Source[SP]; - Inc(SP); - b:=Source[SP]; - Inc(SP); - for i:=1 to Count do - begin - Dest[DP]:=Dest[DP] xor b; - Inc(DP); - end; - end else {copy xor (5)} - for i:=1 to Count do - begin - Dest[DP]:=Dest[DP] xor Source[SP]; - Inc(DP); - Inc(SP); - end; - end; - until false; - - - -=================== - 6. THE .CPS FILES -=================== - -The .CPS files contain 320x200x256 images. The images are compressed with -the Format80 compression method. They may or may not contain a palette. - -The header has the following structure : - - Header : record - Size : word; {File size - 2} - Unknown : word; {Always 0004h} - ImSize : word; {Size of uncompressed image (always 0FA00h)} - Palette : longint; {Is there a palette ?} - end; - -If Palette is 03000000h then there's a palette after the header, otherwise -the image follows. CPS file without palette can be found in the SETUP.MIX -file, and they all use the Palette that can be found inside the same .MIX. - -The image that follows the palette (or the Header) is in Format80 which is -explained above. - -=================== - 7. THE .WSA FILES -=================== - - -WSA files contain short animations and can be found in the GENERAL.MIX -files. -They are basically a series of Format40 images, that are then compressed -with -Format80. - -The header is : - - Header : record - NumFrames : word; {Number of frames} - X,Y : word; {Position on screen of the upper left -corner} - W,H : word; {Width and height of the images} - Delta : longint; {Frames/Sec = Delta/(2^10)} - end; - -Following that there's an array of offsets : - - Offsets : array [0..NumFrames+1] of longint; - -The obtain the actual offset, you have to add 300h. That is the size of the -palette that follows the Offsets array. -As for .SHP files the two last offsets have a special meaning. -If the last offset is 0 then the one before it points to the end of file -(after you added 300h of course). -If the last one is <>0 then it points to the end of the file, and the -one before it points to a special frame that gives you the difference -between the last and the first frame. This is used when you have to loop the -animation. - -As I said before, the images are in Format40 but are then compressed with -Format80. That means that you first have to uncompress the Format80 and then -decode the Format40 image you obtain. -The first frame should be xor-ed over a black image (filled with zeros), all -the other are xor-ed over the previous one. - -There is a variant of the file without the palette that can be found in -SETUP.MIX but I wasn't able to decode it (maybe there are some commands I -don't know about)... - -===================== - 8. ADDITIONAL NOTES -===================== - -The VQA files (that contain movies) have been decoded by Aaron Glover -(arn@ibm.net), and are explained in a document he wrote up. -You can find the document on my homepage (or ask him directly). - -What is still missing are the .AUD files. -It seems that the AUD files use some kind of lossy sound compression, -which means that it is almost impossible to decode them. -However if someone manages to work them out, I'd really appreciate some -info. - -I know my explanations are not very good, but you'll have to bear them, -unless someone else wants to rewrite this. - -============ - 9. CREDITS -============ - -I wish to thank the following people : - --Andrew Griffin (buggy@adam.com.au) for starting it all. --Aaron Glover (arn@ibm.net) and - Denis Moeller (d.moeller@rendsburg.netsurf.de) for their work on .SHP -files. --Aaron Glover for decoding the VQA files. --Carl Kenner (andrew.kenner@unisa.edu.au) for the info on .CPS files. - - -Vladan Bato (bat22@geocities.com) -http://www.geocities.com/SiliconValley/8682 diff --git a/doc/cncmap.txt b/doc/cncmap.txt deleted file mode 100644 index 3dacb4ee6b..0000000000 --- a/doc/cncmap.txt +++ /dev/null @@ -1,500 +0,0 @@ -THE COMMAND & CONQUER MAPS - -Rev. 1f - -by Vladan Bato (bat22@geocities.com) - -This document explains the format of the maps and the associated graphics -files. It has also a complete listing of all available map values. -This document is meant for people who want to make a C&C scenery editor. -You can also use it to edit manually the maps but IMHO it's a suicide if you -can't see what you are doing. - -ABOUT .MIX FILES - -First of all I will explain the structure of MIX files, since all the -graphics are in the TEMPERAT, DESERT, and WINTER.MIX files. - -Each MIX file contains several internal files that can be extracted. I will -refer to the internal files as just "files". -The MIX file is made up of two parts: the first one is the Header, the -second one is the Body that contains all the files. - -The structure of the header is: -(I will use pascal notation here) - -Header = record - NumFiles : word; {Number of internal files} - BodyLength : longint; {Length of the body} - Index : array [1..NumFiles] of - record - ID : longint; {ID of file, computed from filename} - Start : longint; {Offset of file in the body} - Size : longint; {Size of the file} - end; - end; - -Of course you can't use directly such a structure in pascal because its -length is not fixed. -Note that the offsets are relative to the start of the body so to find the -actual offset in the MIX you have to add the size of the header which is -NumFiles*12+6 - -Note also that the records in the Index are not in the same order as the -files are physically stored in the MIX. In this document I will always refer -to the record number in the index and not to the file's actual position in -the MIX. - -ABOUT THE MAP - -All the maps are 64x64 squares large. There are 2 bytes of information for -each square, thus the file is 8192 bytes long. - -The two bytes indicate which image should be placed there. The first one -indicates in which of the internal files of TEMPERAT, DESERT or WINTER.MIX -it is. Each of these internal files contains several images; the second byte -tells which of those images should be taken. The images inside one of the -internal files, if put together, form a larger image. It can be a bridge, -a road section, etc. These are called "templates". Thus, each internal file -contains a template. Each template is made of several "tiles" (images). -Each square of the map contains one tile. It's not necessary to put all -the tiles of a template on the map. - -There are templates of various sizes: from 1x1 to 6x8. -(I will always write the dimensions as WidthxHeight) -The tile numbers range from 0 to WxH-1. -However there are some tiles, which I call "empty tiles", that don't have -any images associated with them. If you try using them C&C will display -the default terrain for that Theater instead. There are empty tiles -especially in the corners of large templates. - -An example may be useful: - -The SW-NE bridge in the temperate theater has two empty tiles: - XXOr X - Empty tile O - other tiles - wbbO b - Bridge - Obbw w - Water (This is probably wrong, I can't check now) - rOOO r - road - -We can see that in the upper left corner there are two empty tiles. -We can put the values 00 and 01 in our map (as the second byte; the first -would be A5h for the bridge), in that case we'll see some grass there. But -we can replace those two tiles with anything else without disturbing the -rest. What I mean, is that if we changed any other tile, a piece of river -would be missing or a rock could be cut, ruining the map; but if we -replace the empty tiles everything is OK. - -So, when we have an empty tile, we can leave it there, or replace it with -anything else. There are two exceptions to this rule however: - -1) Sometimes the empty tiles should be water, but if we don't replace them - C&C will show land in the middle of our lake or sea; -2) There are templates containing roads that finish in one of the corners, - so that the next template must have an empty tile in the opposite corner - to stick to the other. - -An example might help: - -Imagine that we have two road sections like these: - OOrr OOrr - Orrr Orrr - rrrO rrrO - rrOO rrOO - -and we want to stick them diagonally: - OOrr - Orrr - rrrO - rrOO - OOrr - Orrr - rrrO - rrOO - -Something is obviously missing. We need to add some tiles to fill it like -this: - OOrr - Orrr - rrrO - RrrOO - OOrrR - Orrr - rrrO - rrOO - -The solution could be to have two templates like these: - OOOO ROOO - OOOO OOOO - OOOO OOOO - OOOR OOOO -or to have one little template with empty tiles: - RX - XR (Where X are empty tiles) - -Now we can put this between the two road sections, replacing the empty -tiles with the corner tiles of the road sections. - -There are many road sections like this and I've indicated them with -"(Conn.)" in the table at the end of this document. - -ABOUT THE DESERT, TEMPERAT, and WINTER.MIX FILES - -These are the files that hold the graphics for the templates. There's one -file inside the MIX for each template, and each file has several tiles -inside. -There are other files inside the MIXes, probably for the trees and other -overlay elements but I don't know the format. If somebody knows their -format, please let me know. - -In each MIX there's also a palette, the entries are: -DESERT.MIX entry n. 26 -TEMPERAT.MIX entry n. 62 -WINTER.MIX entry n. 62 - -I will now explain the format of the files with map graphics. -First of all there's a header with the following structure: - -Header = record - Width : word; {Width of images, always 24 (18h)} - Heigth : word; {Heigth of images, always 24} - NumTil : word; {Number of Tiles (may differ from num. of Images} - Zero1 : word; {Seems to be always 0000h} - Size : longint; {size of file} - ImgStart : longint; {Offset of first image} - Zero2 : longint; {Seems to be always 00000000h} - ID1 : word; {Always FFFFh} - ID2 : word; {Always 1A0Dh (or 0D1Ah I can't remeber} - Index2 : longint; {Offset of Index2} - Index1 : longint; {Offset of Index1} {I will explain these -later} - end; - -The images follow the header but I suppose they could be anywhere. -They are all 24x24 pixel, uncompressed and are one after the other. -Note that the number of images may differ from the number of tiles if -there are some empty tiles. If there are empty tiles, the actual number of -images can be smaller than the number of tiles. To work out the number -of images you can use the formula : (Index1-ImgStart)/(24*24). -However, you won't have to do this if the index is not corrupt. - -Index1 has the following format: - - Index1 : array [0..NumTil-1] of byte; - -where NumTil is the number of tiles. - -Each entry in Index1 corresponds to one tile, and indicates which image -(of that file) is associated with it. If the entry is FFh than that tile -is empty. - -Index2 is an array of NumImages bytes where NumImages is the real -number of images in the file. However it's always filled with zeros -(sometimes there's a 1 somewhere but I don't know it's meaning). - -Note that there's no way to know the dimensions (Width and Height) of the -template. If there are 6 tiles it could be 6x1, 1x6, 3x2, 2x3. I worked out -the dimensions of all templates myself (It's easy, all you have to do is to -try different widths and look at the screen). - - -For example a procedure that has to display template 61h, tile 3 of the -Desert theater would do: -1) Look in the table and find in which file it is in (entry 168 of - DESERT.MIX) -2) Open that file (seek it inside the MIX) -3) Read the Header -4) Read Index1 and read the 4th byte (for tile 3), let it be N -5) Seek ImgStart+Width*Height*N -6) Read the Image and display it - -AND FINALLY THE TABLE - -Here is the table of all available map values (template numbers), the -dimensions and the relative entries in the DESERT, WINTER, and TEMPERAT.MIX. -There's also a brief description for those that don't want or don't know -how to write an editor. However, I think that it will be difficult to stick -the templates together without seeing them. - -An "x" means that the template doesn't exist in that theater. There are many -templates that exist only in one theater and will show as black holes in the -others (causing the HOM effect). The WINTER and TEMPERATE theaters are -however very similar, and differ only in a few templates. -The roads and cliffs are mostly the same for the three theaters, but be -careful about the river and coast templates because they are not the same. - - V | DES | TEM | WIN | Dim. | Name | Description ------+-----+-----+-----+-------+----------+--------------------------------- --- - 00h | 007 | 011 | 028 | [4x4] | CLEAR1 | Default terrain - 01h | 002 | 007 | 007 | [1x1] | W1 | Water (not animated) - 02h | x | 009 | 009 | [2x2] | W2 | Water - 03h | x | 087 | 087 | [3x3] | SH1 | Coast WD (1) - 04h | x | 106 | 105 | [3x3] | SH2 | Coast WD - 05h | x | 126 | 124 | [1x1] | SH3 | Rock in water - 06h | x | 143 | 140 | [2x1] | SH4 | Rock in water - 07h | x | 159 | 157 | [3x3] | SH5 | Coast WD - 08h | x | 018 | 017 | [3x3] | SH11 | Fjord WD - 09h | x | 024 | 023 | [3x3] | SH12 | Coast WU - 0Ah | x | 031 | 031 | [3x3] | SH13 | Coast WU - 0Bh | x | 037 | 037 | [3x3] | SH14 | Coast WU - 0Ch | x | 042 | 042 | [3x3] | SH15 | Coast WU - 0Dh | 106 | 074 | 074 | [2x2] | S01 | Cliff Left Edge - 0Eh | 122 | 093 | 092 | [2x3] | S02 | Cliff Wu-Wd (2) - 0Fh | 138 | 112 | 110 | [2x2] | S03 | Cliff W-E - 10h | 154 | 131 | 128 | [2x2] | S04 | Cliff W-E - 11h | 170 | 147 | 144 | [2x2] | S05 | Cliff W-E - 12h | 185 | 163 | 161 | [2x3] | S06 | Cliff Wd-Eu - 13h | 200 | 180 | 179 | [2x2] | S07 | Cliff Right Edge - 14h | 212 | 195 | 195 | [2x2] | S08 | Cliff Top Edge - 15h | 225 | 208 | 209 | [3x2] | S09 | Cliff N-S - 16h | 096 | 064 | 064 | [2x2] | S10 | Cliff N-S - 17h | 108 | 078 | 078 | [2x2] | S11 | Cliff N-S - 18h | 124 | 097 | 096 | [2x2] | S12 | Cliff N-S - 19h | 140 | 117 | 115 | [3x2] | S13 | Cliff N-S - 1Ah | 157 | 135 | 132 | [2x2] | S14 | Cliff Bottom Edge - 1Bh | 172 | 151 | 149 | [2x2] | S15 | Cliff Left Edge - 1Ch | 187 | 167 | 166 | [2x3] | S16 | Cliff Wu-Ed - 1Dh | 202 | 184 | 184 | [2x2] | S17 | Cliff W-E - 1Eh | 215 | 199 | 200 | [2x2] | S18 | Cliff W-E - 1Fh | 228 | 211 | 213 | [2x2] | S19 | Cliff W-E - 20h | 098 | 068 | 069 | [2x3] | S20 | Cliff Wu-Ed - 21h | 110 | 082 | 082 | [1x2] | S21 | Cliff Right Edge - 22h | 126 | 101 | 100 | [2x1] | S22 | Cliff Corner S-E Internal - 23h | 142 | 121 | 119 | [3x2] | S23 | Cliff Sl-Nr - 24h | 159 | 139 | 136 | [2x2] | S24 | Cliff N-S - 25h | 174 | 155 | 153 | [2x2] | S25 | Cliff N-S - 26h | 189 | 171 | 170 | [2x2] | S26 | Cliff N-S - 27h | 204 | 188 | 188 | [3x2] | S27 | Cliff Nl-Sr - 28h | 218 | 202 | 203 | [2x2] | S28 | Cliff Bottom Edge - 29h | 230 | 213 | 215 | [2x2] | S29 | Cliff Corner N-E External - 2Ah | 101 | 070 | 071 | [2x2] | S30 | Cliff Corner S-E Ext - 2Bh | 113 | 084 | 084 | [2x2] | S31 | Cliff Corner W-S Ext - 2Ch | 129 | 103 | 102 | [2x2] | S32 | Cliff Corner N-W Ext - 2Dh | 145 | 123 | 121 | [2x2] | S33 | Cliff Corner N-E Internal - 2Eh | 162 | 141 | 138 | [2x2] | S34 | Cliff Corner S-E Int - 2Fh | 177 | 157 | 155 | [2x2] | S35 | Cliff Corner W-S Int - 30h | 192 | 173 | 172 | [2x2] | S36 | Cliff Corner W-N Int - 31h | 207 | 190 | 190 | [2x2] | S37 | Cliff Junction NW-SE - 32h | 221 | 204 | 205 | [2x2] | S38 | Cliff Junction SW-NE - 33h | x | 027 | 026 | [3x3] | SH32 | Coast Corner N-W Int - 34h | x | 033 | 033 | [3x3] | SH33 | Coast Corner N-E Int - 35h | 017 | x | x | [4x1] | SH20 | Coast WD - 36h | 024 | x | x | [3x1] | SH21 | Coast WD - 37h | 041 | x | x | [6x2] | SH22 | Coast WD - 38h | 049 | x | x | [2x2] | SH23 | Coast WD - 39h | 118 | x | x | [1x1] | BR1 | Bush - 3Ah | 134 | x | x | [1x1] | BR2 | Bush - 3Bh | 150 | x | x | [1x1] | BR3 | Cactus - 3Ch | 166 | x | x | [1x1] | BR4 | Cactus - 3Dh | 181 | x | x | [1x1] | BR5 | ??? Purple square (bug ?) - 3Eh | 196 | x | x | [2x2] | BR6 | Bushes - 3Fh | 210 | x | x | [2x2] | BR7 | Bushes - 40h | 223 | x | x | [3x2] | BR8 | Bushes - 41h | 234 | x | x | [3x2] | BR9 | Bushes - 42h | 016 | x | x | [2x1] | BR10 | ??? Purple squares (bug ?) - 43h | 105 | 073 | x | [1x1] | P01 | Bones / Wall (3) - 44h | 121 | 092 | x | [1x1] | P02 | Bones / Wall (3) - 45h | 137 | 111 | x | [1x1] | P03 | Mud / UFO (3) (6) - 46h | 153 | 130 | x | [1x1] | P04 | Rock / UFO (3) (6) - 47h | 169 | x | x | [2x2] | P05 | Gray Sand - 48h | 184 | x | x | [6x4] | P06 | Gray Sand - 49h | 199 | 179 | 178 | [4x2] | P07 | Mud - 4Ah | x | 194 | 194 | [3x2] | P08 | Mud - 4Bh | x | 045 | 045 | [3x2] | SH16 | Fjord WU - 4Ch | 072 | 047 | 047 | [2x2] | SH17 | Water (anim.) - 4Dh | 078 | 049 | 049 | [2x2] | SH18 | Water (anim.) - 4Eh | 084 | x | x | [3x2] | SH19 | Coast WD - 4Fh | x | 116 | 114 | [3x2] | P13 | Destroyed House - 50h | x | 134 | 131 | [2x1] | P14 | Walls - 51h | x | x | 148 | [4x2] | P15 | Snow - 52h | 001 | 006 | 006 | [1x1] | B1 | Rock - 53h | 003 | 008 | 008 | [2x1] | B2 | Rock - 54h | x | 010 | 010 | [3x1] | B3 | Rock - 55h | 004 | x | x | [1x1] | B4 | ?? Rock (7) - 56h | 005 | x | x | [1x1] | B5 | ?? Rock (7) - 57h | 006 | x | x | [1x1] | B6 | ?? Rock (7) - 58h | x | 175 | 174 | [3x3] | SH6 | Coast WD - 59h | x | 191 | 191 | [2x2] | SH7 | Coast Corner W-N External - 5Ah | x | 205 | 206 | [3x3] | SH8 | Coast Corner S-E Ext - 5Bh | x | 215 | 217 | [3x3] | SH9 | Coast Corner W-S Ext - 5Ch | x | 012 | 011 | [2x2] | SH10 | Coast Corner N-E Ext - 5Dh | 104 | 072 | 073 | [2x2] | D01 | Road Bottom End - 5Eh | 120 | 091 | 091 | [2x2] | D02 | Road Left End - 5Fh | 136 | 110 | 109 | [1x2] | D03 | Road Top End - 60h | 152 | 129 | 127 | [2x2] | D04 | Road Right End - 61h | 168 | 146 | 143 | [3x4] | D05 | Road S-N - 62h | 183 | 162 | 160 | [2x3] | D06 | Road S-N - 63h | 198 | 178 | 177 | [3x2] | D07 | Road S-N - 64h | 211 | 193 | 193 | [3x2] | D08 | Road S-N - 65h | 224 | 207 | 208 | [4x3] | D09 | Road W-E - 66h | 095 | 063 | 063 | [4x2] | D10 | Road W-E - 67h | 107 | 077 | 077 | [2x3] | D11 | Road W-E - 68h | 123 | 096 | 095 | [2x2] | D12 | Road W-E - 69h | 139 | 115 | 113 | [4x3] | D13 | Road Wu-Ed - 6Ah | 156 | 133 | 130 | [3x3] | D14 | Road T N--W+E (4) - 6Bh | 171 | 150 | 147 | [3x3] | D15 | Road Y S--N+E (4) - 6Ch | 186 | 166 | 164 | [3x3] | D16 | Road Y S--N+E - 6Dh | 201 | 183 | 182 | [3x2] | D17 | Road T S--W+E - 6Eh | 214 | 198 | 198 | [3x3] | D18 | Road T W--N+S - 6Fh | 227 | 210 | 211 | [3x3] | D19 | Road + W-N-E-S - 70h | 097 | 067 | 067 | [3x3] | D20 | Road Corner N-E - 71h | 109 | 081 | 081 | [3x2] | D21 | Road Corner S-E - 72h | 125 | 100 | 099 | [3x3] | D22 | Road Corner W-S - 73h | 141 | 120 | 118 | [3x3] | D23 | Road Corner W-N - 74h | 158 | 138 | 135 | [3x3] | D24 | Road Diagonal NW-SE (5) - 75h | 173 | 154 | 152 | [3x3] | D25 | Road Diag NW-SE - 76h | 188 | 170 | 169 | [2x2] | D26 | Road Diag NW-SE (Conn.) (5) - 77h | 203 | 187 | 187 | [2x2] | D27 | Road Diag NW-SE (Conn.) - 78h | 217 | 201 | 202 | [2x2] | D28 | Road Corner W-SE (Conn.) - 79h | 229 | 212 | 214 | [2x2] | D29 | Road Corner N-SE (Conn.) - 7Ah | 100 | 069 | 070 | [2x2] | D30 | Road Y SE--N+W (Conn.) - 7Bh | 112 | 083 | 083 | [2x2] | D31 | Road Corner E-NW (Conn.) - 7Ch | 128 | 102 | 101 | [2x2] | D32 | Road Corner S-NW (Conn.) - 7Dh | 144 | 122 | 120 | [2x2] | D33 | Road Y NW--S+E (Conn.) - 7Eh | 161 | 140 | 137 | [3x3] | D34 | Road Diag SW-NE - 7Fh | 176 | 156 | 154 | [3x3] | D35 | Road Diag SW-NE - 80h | 191 | 172 | 171 | [2x2] | D36 | Road Diag SW-NE (Conn.) - 81h | 206 | 189 | 189 | [2x2] | D37 | Road Diag SW-NE (Conn.) - 82h | 220 | 203 | 204 | [2x2] | D38 | Road Corner E-SW (Conn.) - 83h | 232 | 214 | 216 | [2x2] | D39 | Road Corner N-SW (Conn.) - 84h | 103 | 071 | 072 | [2x2] | D40 | Road Y SW--N+E (Conn.) - 85h | 115 | 085 | 085 | [2x2] | D41 | Road Corner W-NE (Conn.) - 86h | 131 | 104 | 103 | [2x2] | D42 | Road Corner S-NE (Conn.) - 87h | 147 | 124 | 122 | [2x2] | D43 | Road Y NE--W+S (Conn.) - 88h | x | 017 | 016 | [5x4] | RV01 | River W-E - 89h | x | 023 | 022 | [5x3] | RV02 | River W-E - 8Ah | x | 030 | 030 | [4x4] | RV03 | River Wu-Ed - 8Bh | x | 036 | 036 | [4x4] | RV04 | River Wd-Eu - 8Ch | x | 041 | 041 | [3x3] | RV05 | River N-S - 8Dh | x | 044 | 044 | [3x2] | RV06 | River N-S - 8Eh | x | 046 | 046 | [3x2] | RV07 | River N-S - 8Fh | x | 048 | 048 | [2x2] | RV08 | River Corner S-E - 90h | x | 052 | 052 | [2x2] | RV09 | River Corner W-S - 91h | x | 014 | 013 | [2x2] | RV10 | River Corner N-E - 92h | x | 020 | 019 | [2x2] | RV11 | River Corner W-N - 93h | x | 026 | 025 | [3x4] | RV12 | River Y N--W+S - 94h | x | 032 | 032 | [4x4] | RV13 | River Y Eu--W+S - 95h | 055 | x | x | [4x3] | RV14 | River W-E - 96h | 060 | x | x | [4x3] | RV15 | River W-E - 97h | 067 | x | x | [6x4] | RV16 | River Wd-Eu - 98h | 073 | x | x | [6x5] | RV17 | River Wu-Ed - 99h | 079 | x | x | [4x4] | RV18 | River N-S - 9Ah | 085 | x | x | [4x4] | RV19 | River N-S - 9Bh | 018 | x | x | [6x8] | RV20 | River Nr-Sl - 9Ch | 025 | x | x | [5x8] | RV21 | River Nl-Sr - 9Dh | 042 | x | x | [3x3] | RV22 | River Corner E-S - 9Eh | 050 | x | x | [3x3] | RV23 | River Corner W-S - 9Fh | 057 | x | x | [3x3] | RV24 | River Corner N-E - A0h | 062 | x | x | [3x3] | RV25 | River Corner N-W - A1h | 009 | 002 | 004 | [3x3] | FORD1 | River Crossing (Road W-E) - A2h | 010 | 003 | 005 | [3x3] | FORD2 | River Crossing (Road N-S) - A3h | 047 | 057 | 057 | [3x3] | FALLS1 | Falls W-E - A4h | 048 | 058 | 058 | [3x2] | FALLS2 | Falls N-S - A5h | x | 218 | 220 | [4x4] | BRIDGE1 | Bridge SW-NE - A6h | x | 059 | 059 | [4x4] | BRIDGE1D | Fallen Bridge SW-NE - A7h | x | 219 | 221 | [5x5] | BRIDGE2 | Bridge NW-SE - A8h | x | 060 | 060 | [5x5] | BRIDGE2D | Fallen Bridge NW-SE - A9h | 236 | x | x | [6x5] | BRIDGE3 | Bridge SW-NE - AAh | 092 | x | x | [6x5] | BRIDGE3D | Fallen Bridge SW-NE - ABh | 237 | x | x | [6x4] | BRIDGE4 | Bridge NW-SE - ACh | 093 | x | x | [6x4] | BRIDGE4D | Fallen Bridge NW-SE - ADh | 056 | x | x | [3x3] | SH24 | Fjord WD - AEh | 061 | x | x | [3x2] | SH25 | Coast WU - AFh | 068 | x | x | [3x2] | SH26 | Coast WU - B0h | 074 | x | x | [4x1] | SH27 | Coast WU - B1h | 080 | x | x | [3x1] | SH28 | Coast WU - B2h | 086 | x | x | [6x2] | SH29 | Coast WU - B3h | 019 | x | x | [2x2] | SH30 | Coast WU - B4h | 027 | x | x | [3x3] | SH31 | Fjord WU - B5h | x | x | 165 | [2x2] | P16 | Snow - B6h | x | x | 183 | [4x2] | P17 | Snow - B7h | x | x | 199 | [4x3] | P18 | Snow - B8h | x | x | 212 | [4x3] | P19 | Snow - B9h | x | x | 068 | [4x3] | P20 | Snow - BAh | x | 038 | 038 | [3x3] | SH34 | Coast WR - BBh | x | 043 | 043 | [3x3] | SH35 | Coast WL - BCh | 069 | x | x | [1x1] | SH36 | Coast Corner S-E Int - BDh | 075 | x | x | [1x1] | SH37 | Coast Corner W-S Int - BEh | 081 | x | x | [1x1] | SH38 | Coast Corner N-E Int - BFh | 087 | x | x | [1x1] | SH39 | Coast Corner N-W Int - C0h | 020 | x | x | [3x3] | SH40 | Coast Corner S-E Int - C1h | 028 | x | x | [3x3] | SH41 | Coast Corner N-W Int - C2h | 043 | x | x | [1x2] | SH42 | Coast WL - C3h | 051 | x | x | [1x3] | SH43 | Coast WL - C4h | 058 | x | x | [1x3] | SH44 | Coast WR - C5h | 063 | x | x | [1x2] | SH45 | Coast WR - C6h | 070 | x | x | [3x3] | SH46 | Coast Corner S-E Int - C7h | 076 | x | x | [3x3] | SH47 | Coast Corner S-E Int - C8h | 082 | x | x | [3x3] | SH48 | Coast Corner N-E Int - C9h | 088 | x | x | [3x3] | SH49 | Coast Corner N-W Int - CAh | 021 | x | x | [4x3] | SH50 | Coast Corner S-E Ext - CBh | 029 | x | x | [4x3] | SH51 | Coast Corner W-S Ext - CCh | 044 | x | x | [4x3] | SH52 | Coast Corner N-E Ext - CDh | 052 | x | x | [4x3] | SH53 | Coast Corner N-W Ext - CEh | 059 | x | x | [3x2] | SH54 | Coast WD - CFh | 064 | x | x | [3x2] | SH55 | Coast WD - D0h | 071 | x | x | [3x2] | SH56 | Coast WU - D1h | 077 | x | x | [3x2] | SH57 | Coast WU - D2h | 083 | x | x | [2x3] | SH58 | Coast WR - D3h | 089 | x | x | [2x3] | SH59 | Coast WR - D4h | 022 | x | x | [2x3] | SH60 | Coast WL - D5h | 030 | x | x | [2x3] | SH61 | Coast WL - D6h | 045 | x | x | [6x1] | SH62 | Coast WD - D7h | 053 | x | x | [4x1] | SH63 | Coast WD - - -!! Warning !! -Values from D8h-FEh will cause the game to crash (it just locks up on -my computer)!!! - -The value FFh indicates the default terrain (I think the 4x4 template is -used). - -Notes: - -(0a) There may be some errors in this table because I typed it in a hurry - (you don't know how much time it takes), so if you find any errors - please report them to me. -(0b) The names are taken from the GAME.DAT file. I matched them with the - files in the theater mix files. The complete filenames are the names - above plus an extension that depends on the theater (.DES, .TEM, .WIN). -(1) For Coasts, WD, WU, WL, and WR mean : Water on the bottom - (Down), Top (Up), left and right. -(2) For cliffs and roads the two letters indicate from which to which side - the Road (or cliff) goes. The lowercase letter means up, down, left, - right to indicate in which part of that side it starts. - For Example: - - River Wu-Ed : - OOOOO - rOOOO - OrrOO - OOOrr - OOOOO - -(3) These templates exist in both the DESERT and the TEMPERATE theaters but - are not the same. I've put a description of both. - -(4) For Roads: - Roads T and Y mean that the road splits in the shape of a T or a Y. - E--N+S means it starts from the east edge then splits in two parts, one - going to the north and the other to the south edge - -(5) NW or any other corner means that the road ends in that corner and if it - says (Conn.), that means that it has an empty tile in that corner. - So you have to use the (Conn.) templates to stick together the other - ones. - -(6) In TEMPERAT.MIX these two files are buggy, they report there are 67h - tiles, but if you look at the index you'll see they all point to the - second image which (I think) is of uniform color. Only the first tile is - ever used. - -(7) These three templates don't work in C&C (HOM effect), but their graphics - exist in the DESERT.MIX file. Do not use them ! - -That's all. I hope this info will be used by somebody to make a scenery -editor. - -Report any errors to me. Also, if you have any info about other file formats -please share it with me. diff --git a/doc/cncrules.ini b/doc/cncrules.ini deleted file mode 100644 index 37a1bff717..0000000000 --- a/doc/cncrules.ini +++ /dev/null @@ -1,2064 +0,0 @@ -; Command & Conquer RULES.INI -; If placed in game directory, it will not override built in values. Values to be used as -; multipliers or percentages can be specified as either a simple floating point number (embed ".") -; or as a conventional percentage number (append "%"). Values used as cell distances or time delays -; are specified as simple floating point number. Distance values are expressed in cells. Time -; values are expressed in minutes. - -; This is not the real file because there is none - the C&C rules were hard-coded into the game.dat -; file (C&C95.exe in Win95 Edition). This is what the file could have been like, based on what -; editors/testing tells us, as well as what the values were in Red Alert, which is VERY similar to -; C&C. Therefore most of the rules file has been taken directly from Red Alert, as well as the rules -; flags, if applicable. The unit names are the actual names also used in the game files for the .shp -; images. There is still a lot missing from what should be here. These are usually things that cannot -; be found, so it is unknown what their values are. -; C&C is different from Red Alert and its successors in a few ways. First of all, the Burst= flag is -; not tied to weapons here. Instead, units that have this flag set to yes will fire their weapons twice, -; but another unit with the same weapon may not. Another difference is that explosions from weapons are -; attached to the weapon, not the warhead. An example is that the chemical sprayer and the high-velocity -; chaingun both use the HE warhead, which is also used for the MLRS and hand grenade. When I was doing -; testing it was hard to say this is true, but one clue was that the percentages (verses=) were the same. -; Another clue was that both weapons can destroy walls. -; Note how the object speed is drastically higher than what Red Alert uses. To make it even more -; complicated, C&C treats the speeds for different types of unit differently. But to make it a bit easier -; to compare it to Red Alert: aircraft, ship and vehicle speeds should be divided by four, while infantry -; speeds should be divided by two. Projectile speeds are ok the way they are. A strange quirk is the -; speed of the cargo plane [C17], which is 5. I have the feeling that it should be either doubled or -; tripled but I'm not certain of this. -; Another thing to note is that the numeric data hard-coded in the C&C files has building -; hit-points that are only half of what it says here, and this is also what editors show. -; Don't be fooled by this - the game is wired to double the Strength= values for buildings - -; whatever is in this file is correct. -; -; -ImmoMan - -[General] - -; crates -CrateMinimum=1 ; crates are normally one per human player but never below this number -CrateMaximum=255 ; crates can never exceed this quantity -CrateRadius=3.0 ; radius (cells) for area effect crate powerup bonuses -CrateRegen=3 ; average minutes between random powerup crate regeneration -UnitCrateType=none ; specifies specific unit type for unit type crate ['none' means pick randomly] -SoloCrateMoney=2000 ; money to give for money crate in solo play missions -SilverCrate=HealBase ; solo play silver crate bonus -WoodCrate=Money ; solo play wood crate bonus - -; repair and refit -RefundPercent=50% ; percent of original cost to refund when building/unit is sold -ReloadRate=.04 ; minutes to reload each ammo point for aircraft or helicopters -RepairPercent=20% ; percent cost to fully repair as ratio of full cost -RepairRate=.016 ; minutes between applying repair step -RepairStep=7 ; hit points to heal per repair 'tick' for buildings - -; combat and damage -IonDamage=600 ; damage points for ion cannon strike -AtomDamage=1000 ; damage points when nuclear bomb explodes (regardless of source) -BallisticScatter=1.0 ; maximum scatter distance (cells) for inaccurate ballistic projectiles -C4Delay=.02 ; minutes to delay after placing C4 before building will explode -Crush=1.5 ; if this close (cells) to crushable target, then crush instead of firing upon it (computer only) -ExpSpread=.3 ; cell damage spread per 256 damage points for exploding object types [if Explodes=yes] -HomingScatter=2.0 ; maximum scatter distance (cells) for inaccurate homing projectiles -MaxDamage=1000 ; maximum damage (after adjustments) per shot -MinDamage=1 ; minimum damage (after adjustments) per shot -TiberiumExplosive=no ; Does the harvester explode big time when destroyed? -PlayerAutoCrush=no ; Will player controlled units automatically try to crush enemy infantry? -PlayerReturnFire=no ; More aggressive return fire from player controlled objects? -PlayerScatter=no ; Will player units scatter, of their own accord, from threats and damage? -ProneDamage=50% ; when infantry is prone, damage is reduced to this percentage -TreeTargeting=no ; Automatically show target cursor when over trees? -Incoming=10 ; If an incoming projectile is as slow or slower than this, then - ; object in the target location will try to run away. Grenades and - ; parachute bombs have this characteristic. - -; income and production -BailCount=28 ; number of 'bails' carried by a harvester -BuildSpeed=1.0 ; general build speed [time (in minutes) to produce a 1000 credit cost item] -BuildupTime=.06 ; average minutes that building build-up animation runs -TiberiumValue=25 ; credits per 'bail' carried by a harvester -GrowthRate=2 ; minutes between Tiberium growth -SeparateAircraft=no ; Is first helicopter to be purchased separately from helipad? -SurvivorRate=.4 ; fraction of building cost to be converted to survivors when sold - -; audio/visual map controls -AllyReveal=yes ; Allies automatically reveal radar maps to each other? -ConditionRed=25% ; when damaged to this percentage, health bar turns red -ConditionYellow=50% ; when damaged to this percentage, health bar turns yellow -DropZoneRadius=4 ; distance around drop zone flair that map reveals itself -EnemyHealth=yes ; Show enemy health bar graph when selected? -Gravity=3 ; gravity constant for ballistic projectiles -IdleActionFrequency=.1 ; average minutes between infantry performing idle actions -MessageDelay=.6 ; time duration of multiplayer messages displayed over map -MovieTime=.06 ; minutes that movie recorder will record when activated (debug version only) -NamedCivilians=no ; Show true names over civilians and civilian buildings? -SavourDelay=.03 ; delay between scenario end and ending movie [keep the delay short] -SpeakDelay=2 ; minutes between EVA repeating advice to the player - -; computer and movement controls -BaseBias=2 ; multiplier to threat target value when enemy is close to friendly base -BaseDefenseDelay=.25 ; minutes delay between sending response teams to deal with base threat -CloseEnough=2.75 ; If distance to destination less than this, then abort movement if otherwise blocked. -DamageDelay=1 ; minutes between applying trivial structure damage when low on power -GameSpeedBias=1 ; multiplier to overall game object movement speed -LZScanRadius=16 ; maximum radius to scan for alternate landing zone if otherwise occupied -Stray=2.0 ; radius distance (cells) that team members may stray without causing regroup action -SubmergeDelay=.02 ; forced delay that subs will remain on surface before allowing to submerge -SuspendDelay=2 ; minutes that suspended teams will remain suspended -SuspendPriority=20 ; teams with less than this priority will suspend during base defense ops -TeamDelay=.6 ; interval between checking for and creating teams - - -; ******* Special weapon charge times ******* -; The time (minutes) for recharge of these special weapons. -[Recharge] -Nuke=13 ; nuclear missile -Airstrike=8 ; A-10 strike -IonCannon=10 ; ion cannon - -; ******* Unit Statistics ******* -; Specifies the characteristics of the various game objects. - -; Ammo = number of rounds carried between reloads [-1 means unlimited] (def=-1) -; Armor = the armor type of this object [none,wood,light,heavy,concrete] (def=none) -; Cloakable = Is it equipped with a cloaking device (def=no)? -; Cost = cost to build object (in credits) -; Explodes = Does it explode violently when destroyed [i.e., does it do collateral damage] (def=no)? -; GuardRange = distance to scan for enemies to attack (def=use weapon range) -; Invisible = Is completely and always invisible to enemy (def=no)? -; Owner = who can build this [GoodGuy, BadGuy, Neutral or Special] (def=none) -; Prerequisite = list of buildings needed before this can be manufactured*** (def=nothing) -; Primary = primary weapon equipped with (def=none) -; Secondary = secondary weapon equipped with (def=none) -; Burst = does it fire its weapon(s) twice in rapid succession (def=no)? -; RangeLimit = does this unit only attack units at this range even if the weapon range is different (def=same as weapon range)? -; ROT = Rate Of Turn for body (if present) and turret (if present) (def=0) -; SelfHealing = Does the object heal automatically up to half strength (def=no)? -; Sight = sight range, in cells -; Strength = strength (hit points) of this object -; TechLevel = tech level required to build this [anything higher than 7 means can't build] -; BuildLevel = single player mission level required to build this [max for GDI is 15, 13 for Nod, higher means can't build] -; Buildable = can this object be built at all [if yes, TechLevel and BuildLevel are used] (def=no) -; Sensors = Has sensors to detect nearby cloaked objects (def=no)? -; Immune = Is it immune to all combat damage (def=no)? -; Selectable = Can this unit be selected (def=yes)? -; Attack = Will units automatically open fire upon it (units def=yes, buildings def=no)? -; <<< applies only to moving units (not buildings) >>> -; Speed = speed of this object (def=0) -; NoMovingFire = The unit must stop before it can fire (def=no)? -; TiberiumHeal = This unit regenerates hit points in a Tiberium field (def=no) -; <<< applies only to aircraft >>> -; Landable = Can it land on open ground (def=yes)? -; <<< applies only to infantry types >>> -; C4 = Equipped with building sabotage explosives [presumes Infiltrate is true] (def=no)? -; Fraidycat = Is it inherently afraid and will panic easily (def=no)? -; Infiltrate = Can it enter a building to capture or C4 it (def=no)? -; TiberiumProof = Is it immune to damage from walking in Tiberium (def=no)? -; <<< applies only to terrestrial driving vehicle types >>> -; Crushable = Can it be crushed by a heavy tracked vehicle (def=no)? -; Tracked = Is this vehicle tracked [as opposed to wheeled] (def=no)? -; Passengers = number of passengers it may carry (def=0) -; <<< applies only to building types >>> -; Bib = Should the building have an attached bib (def=no)? -; Capturable = Can this building be infiltrated by a spy/engineer (def=no)? -; Crewed = Does it contain a crew that can escape (def=no)? -; PowerIn = power drain (def=0) -; PowerOut = power output -; Powered = Does it require power to function (def=no)? -; Repairable = Can it be repaired (def=yes)? -; Storage = the number of credits this building can store (def=0) -; Closable = can this building be "closed" when idle [this requires special art, if it has a weapon, it will close after every shot] (def=no)? -; ClosedMultiple = How many times stronger this building is when it is "closed" (def=1) - -; *** TECH means EYE or TMPL, BAR means HAND or PYLE and WAR means WEAP or AFLD - the game is hard-wired to treat both prerequisites as equal, like Red Alert did with both tech centres - -; ******* terrestrial driving vehicle types ******* -; visceroid -[VICE] -Primary=Chemspray -Strength=150 -Armor=wood -TechLevel=99 -BuildLevel=1 -Sight=4 -Speed=18 -Cost=800 -ROT=5 -Explodes=yes -TiberiumHeal=yes - -; flame tank -[FTNK] -Prerequisite=WAR,HQ -Buildable=yes -Primary=FlameTongue -Burst=yes -Strength=300 -Armor=heavy -TechLevel=4 -BuildLevel=9 -Sight=4 -Speed=18 -Owner=BadGuy -Cost=800 -ROT=5 -Crewed=yes -Tracked=yes - -; stealth tank -[STNK] -Prerequisite=WAR,HQ -Buildable=yes -Primary=Dragon -Burst=yes -Strength=110 -Armor=light -TechLevel=5 -BuildLevel=12 -Sight=4 -Speed=30 -Owner=BadGuy -Cost=900 -ROT=5 -Crewed=yes -Tracked=yes -Cloakable=yes - -; light tank -[LTNK] -Prerequisite=WAR -Buildable=yes -Primary=75mm -Strength=300 -Armor=heavy -TechLevel=3 -BuildLevel=5 -Sight=3 -Speed=18 -Owner=BadGuy -Cost=600 -ROT=5 -Crewed=yes -Tracked=yes - -; medium tank -[MTNK] -Prerequisite=WAR -Buildable=yes -Primary=105mm -Strength=400 -Armor=heavy -TechLevel=3 -BuildLevel=7 -Sight=3 -Speed=18 -Owner=GoodGuy -Cost=800 -ROT=5 -Crewed=yes -Tracked=yes - -; mammoth tank -[HTNK] -Prerequisite=WAR,FIX -Buildable=yes -Primary=120mm -Secondary=MammothTusk -Burst=yes -Strength=600 -Armor=heavy -TechLevel=5 -BuildLevel=13 -Sight=4 -Speed=12 -Owner=GoodGuy -Cost=1500 -ROT=5 -Crewed=yes -Tracked=yes -SelfHealing=yes - -; mobile headquarters -[MHQ] -Strength=110 -Armor=light -TechLevel=99 -BuildLevel=99 -Sight=5 -Speed=18 -Owner=GoodGuy,BadGuy -Cost=600 -ROT=5 - -; surface-to-surface missile launcher -[MLRS] -Prerequisite=WAR,OBLI -Buildable=yes -Primary=HonestJohn -Strength=120 -Armor=light -TechLevel=7 -BuildLevel=98 -Sight=4 -Speed=18 -Owner=BadGuy -Cost=750 -ROT=5 -Crewed=yes -Tracked=yes - -; mobile artillery -[ARTY] -Prerequisite=WAR -Buildable=yes -Primary=155mm -Strength=75 -Armor=light -TechLevel=6 -BuildLevel=9 -Sight=4 -Speed=12 -Owner=BadGuy -Cost=450 -ROT=2 -Crewed=yes - -; tiberium harvester -[HARV] -Prerequisite=WAR,PROC -Buildable=yes -Strength=600 -Armor=light -TechLevel=2 -BuildLevel=7 -Sight=2 -Speed=12 -Owner=GoodGuy,BadGuy -Cost=1400 -ROT=5 -Tracked=yes -Crewed=yes - -; mobile construction yard -[MCV] -Prerequiste=WAR,TECH -Buildable=yes -Strength=600 -Armor=light -TechLevel=7 -BuildLevel=15 -Sight=2 -Speed=12 -Owner=GoodGuy,BadGuy -Cost=5000 -ROT=5 -Tracked=yes -Crewed=yes - -; hum-vee -[JEEP] -Prerequisite=WAR -Buildable=yes -Primary=M60 -Strength=150 -Armor=light -TechLevel=2 -BuildLevel=5 -Sight=2 -Speed=30 -Owner=GoodGuy -Cost=400 -ROT=10 -Crewed=yes - -; Nod buggy -[BGGY] -Prerequisite=WAR -Buildable=yes -Primary=M60 -Strength=140 -Armor=light -TechLevel=2 -BuildLevel=5 -Sight=2 -Speed=30 -Owner=BadGuy -Cost=300 -ROT=10 -Crewed=yes - -; attack bike -[BIKE] -Prerequisite=WAR -Buildable=yes -Primary=Dragon -Strength=160 -Armor=wood -TechLevel=2 -BuildLevel=5 -Sight=2 -Speed=40 -Owner=BadGuy -Cost=500 -ROT=10 -Crushable=yes - -; mobile rocket launcher -[MSAM] -Prerequiste=WAR,TECH -Buildable=yes -Primary=227mm -Burst=yes -Strength=100 -Armor=light -TechLevel=7 -BuildLevel=11 ; game disables this for Nod in any game classed as "single player" -Sight=4 -Speed=18 -Owner=GoodGuy,BadGuy -Cost=800 -ROT=5 -Crewed=yes -Tracked=yes - -; armoured personnel carrier -[APC] -Prerequiste=WAR,PYLE -Buildable=yes -Primary=M60 -Strength=200 -Armor=heavy -TechLevel=4 -BuildLevel=5 -Sight=4 -Speed=35 -Owner=GoodGuy,BadGuy -Cost=700 -ROT=5 -Tracked=yes - -; triceratops -[TRIC] -Primary=DinoBite1 -Strength=700 -Armor=heavy -TechLevel=99 -BuildLevel=99 -Sight=5 -Speed=8 -Owner=GoodGuy,BadGuy -Cost=-1 -ROT=5 - -; tyrannosaurus rex -[TREX] -Primary=DinoBite2 -Strength=750 -Armor=heavy -TechLevel=99 -BuildLevel=99 -Sight=5 -Speed=18 -Owner=GoodGuy,BadGuy -Cost=-1 -ROT=5 - -; velociraptor -[RAPT] -Primary=DinoBite2 -Strength=180 -Armor=heavy -TechLevel=99 -BuildLevel=99 -Sight=5 -Speed=40 -Owner=GoodGuy,BadGuy -Cost=-1 -ROT=5 - -; stegosaurus -[STEG] -Primary=DinoBite1 -Strength=600 -Armor=heavy -TechLevel=99 -BuildLevel=99 -Sight=5 -Speed=8 -Owner=GoodGuy,BadGuy -Cost=-1 -ROT=5 - -; ******* ship types ******* -; patrol boat -[BOAT] -Primary=BoatMissile -Burst=yes -Strength=700 -Armor=heavy -TechLevel=99 -BuildLevel=99 -Sight=5 -Speed=8 -Owner=GoodGuy,BadGuy -Cost=300 - -; landing craft -[LST] -Strength=400 -Armor=light -Immune=yes -TechLevel=99 -BuildLevel=99 -Sight=3 -Speed=30 -Owner=GoodGuy,BadGuy -Cost=300 - -; ******* infantry types ******* -; minigunner -[E1] -Prerequisite=BAR -Buildable=yes -Primary=M16 -Strength=50 -Armor=none -TechLevel=1 -BuildLevel=1 -Sight=1 -Speed=8 -Owner=GoodGuy,BadGuy -Cost=100 - -; grenadier -[E2] -Prerequisite=BAR -Buildable=yes -Primary=Grenade -Strength=50 -Armor=none -TechLevel=1 -BuildLevel=3 -Sight=1 -Speed=10 -Owner=GoodGuy -Cost=160 -Explodes=yes - -; bazooka -[E3] -Prerequisite=BAR -Buildable=yes -Primary=Dragon -Strength=25 -Armor=none -TechLevel=2 -BuildLevel=3 ; game makes it available to GDI at 9 -Sight=2 -Speed=6 -Owner=GoodGuy,BadGuy -Cost=300 - -; flame infantry -[E4] -Prerequisite=BAR -Buildable=yes -Primary=Flamethrower -Strength=70 -Armor=none -TechLevel=1 -BuildLevel=5 -Sight=1 -Speed=10 -Owner=BadGuy -Cost=200 -Explodes=yes - -; chem infantry -[E5] -Prerequisite=BAR,TMPL -Buildable=yes -Primary=Chemspray -Strength=70 -Armor=none -TechLevel=7 -BuildLevel=99 -Sight=1 -Speed=8 -Owner=BadGuy -Cost=300 -Explodes=yes - -; engineer -[E6] -Prerequisite=BAR -Buildable=yes -Strength=25 -Armor=none -TechLevel=3 -BuildLevel=2 -Sight=2 -Speed=8 -Owner=GoodGuy,BadGuy -Cost=500 -Infiltrate=yes - -; commando -[RMBO] -Prerequisite=BAR,TECH -Primary=Sniper -Strength=100 -Armor=none -TechLevel=7 -BuildLevel=99 -Sight=5 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=1000 -Infiltrate=yes -C4=yes - -; Doctor Moebius -[MOEBIUS] -Strength=25 -Armor=none -TechLevel=99 -BuildLevel=99 -Sight=0 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 - -; special agent -[DELPHI] -Primary=Pistol -Strength=25 -Armor=none -TechLevel=99 -BuildLevel=99 -Sight=0 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Ammo=10 - -; special agent -[CHAN] -Strength=25 -Armor=none -TechLevel=99 -BuildLevel=99 -Sight=0 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 - - -; civilians -[C1] -Primary=Pistol -Strength=5 -Armor=none -TechLevel=99 -BuildLevel=99 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Ammo=10 -Fraidycat=yes - -[C2] -Strength=5 -Armor=none -TechLevel=99 -BuildLevel=99 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Fraidycat=yes - -[C3] -Strength=5 -Armor=none -TechLevel=99 -BuildLevel=99 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Fraidycat=yes - -[C4] -Strength=5 -Armor=none -TechLevel=99 -BuildLevel=99 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Fraidycat=yes - -[C5] -Strength=5 -Armor=none -TechLevel=99 -BuildLevel=99 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Fraidycat=yes - -[C6] -Strength=5 -Armor=none -TechLevel=99 -BuildLevel=99 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Fraidycat=yes - -[C7] -Primary=Pistol -Strength=5 -Armor=none -TechLevel=99 -BuildLevel=99 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Ammo=10 -Fraidycat=yes - -[C8] -Strength=5 -Armor=none -TechLevel=99 -BuildLevel=99 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Fraidycat=yes - -[C9] -Strength=5 -Armor=none -TechLevel=99 -BuildLevel=99 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Fraidycat=yes - -[C10] -Strength=5 -Armor=none -TechLevel=99 -BuildLevel=99 -Speed=10 -Owner=GoodGuy,BadGuy -Cost=10 -Fraidycat=yes - -; ******* aircraft types ******* -; orca -[ORCA] -Prerequisite=HPAD -Buildable=yes -Primary=Dragon -Burst=yes -Strength=125 -Armor=heavy -TechLevel=6 -BuildLevel=10 -Sight=0 -Speed=40 -Owner=GoodGuy -Cost=1200 -ROT=4 -Ammo=6 -GuardRange=30 - -; apache -[HELI] -Prerequisite=HPAD -Buildable=yes -Primary=Chaingun -Burst=yes -Strength=125 -Armor=heavy -TechLevel=6 -BuildLevel=10 -Sight=0 -Speed=40 -Owner=BadGuy -Cost=1200 -ROT=4 -Ammo=15 -GuardRange=30 - -; chinook -[TRAN] -Prerequisite=HPAD -Buildable=yes -Strength=90 -Armor=light -TechLevel=6 -BuildLevel=98 -Sight=0 -Speed=30 -Owner=GoodGuy,BadGuy -Cost=1500 -ROT=5 -Passengers=5 - -; cargo plane -[C17] -Strength=25 -Armor=light -TechLevel=0 -BuildLevel=0 -Sight=0 -Speed=50 -Owner=GoodGuy,BadGuy -Cost=800 -ROT=4 -Passengers=5 -Attack=no -Landable=no -Selectable=no - -; A-10 warthog -[A10] -Strength=60 -Armor=light -TechLevel=0 -BuildLevel=0 -Sight=0 -Speed=40 -Owner=GoodGuy,BadGuy -Cost=800 -ROT=4 -Ammo=3 -Landable=no -Selectable=no - -; ******* building types ******* -; temple of Nod -[TMPL] -Prerequisite=HQ -Buildable=yes -Strength=2000 -Armor=light -TechLevel=7 -BuildLevel=13 -Sight=4 -Owner=BadGuy -Cost=3000 -PowerIn=150 -Capturable=yes -Crewed=yes -Bib=yes - -; advanced comm centre -[EYE] -Prerequisite=HQ -Buildable=yes -Strength=1000 -Armor=wood -TechLevel=7 -BuildLevel=13 -Sight=10 -Owner=GoodGuy -Cost=2800 -PowerIn=200 -Capturable=yes -Crewed=yes -Bib=yes - -; weapons factory -[WEAP] -Prerequisite=PROC -Buildable=yes -Strength=400 -Armor=light -TechLevel=2 -BuildLevel=5 -Sight=3 -Owner=GoodGuy -Cost=2000 -PowerIn=30 -Capturable=yes -Crewed=yes -Bib=yes - -; guard tower -[GTWR] -Prerequisite=PYLE -Buildable=yes -Primary=Chaingun -Strength=400 -Armor=wood -TechLevel=2 -BuildLevel=7 -Sight=3 -Owner=GoodGuy -Cost=500 -PowerIn=10 -Crewed=yes -Sensors=yes - -; advanced guard tower -[ATWR] -Prerequisite=HQ -Buildable=yes -Primary=Tomahawk -Burst=yes -Strength=600 -Armor=light -TechLevel=4 -BuildLevel=13 -Sight=4 -Owner=GoodGuy -Cost=1000 -PowerIn=20 -Powered=yes -Crewed=yes -Sensors=yes - -; obelisk of light -[OBLI] -Prerequisite=HQ -Buildable=yes -Primary=Laser -Strength=400 -Armor=light -TechLevel=4 -BuildLevel=11 -Sight=5 -Owner=BadGuy -Cost=1500 -PowerIn=150 -Powered=yes -Crewed=yes -Sensors=yes - -; gun turret -[GUN] -Prerequisite=HAND -Buildable=yes -Primary=TurretGun -Strength=400 -Armor=heavy -TechLevel=2 -BuildLevel=8 -Sight=5 -Owner=BadGuy -Cost=600 -PowerIn=20 -Sensors=yes -Crewed=yes -ROT=12 - -; construction yard -[FACT] -Strength=800 -Armor=wood -TechLevel=99 -BuildLevel=1 -Sight=3 -Owner=GoodGuy,BadGuy -Cost=5000 -PowerIn=15 -PowerOut=30 -Capturable=yes -Crewed=yes -Bib=yes - -; tiberium refinery -[PROC] -Prerequisite=NUKE -Buildable=yes -Strength=900 -Armor=wood -TechLevel=1 -BuildLevel=2 -Sight=4 -Owner=GoodGuy,BadGuy -Cost=2000 -PowerIn=40 -PowerOut=10 -Storage=1000 -Capturable=yes -Crewed=yes -Bib=yes - -; tiberium silo -[SILO] -Prerequisite=PROC -Buildable=yes -Strength=300 -Armor=wood -TechLevel=1 -BuildLevel=2 -Sight=2 -Owner=GoodGuy,BadGuy -Cost=150 -PowerIn=10 -Storage=1500 -Capturable=yes -Crewed=yes -Bib=yes - -; helipad -[HPAD] -Prerequisite=BAR -Buildable=yes -Strength=800 -Armor=wood -TechLevel=6 -BuildLevel=10 ; game disables this for nod in any game classed as "single player" -Sight=3 -Owner=GoodGuy,BadGuy -Cost=1500 -PowerIn=10 -Capturable=yes -Crewed=yes -Bib=yes - -; communications centre -[HQ] -Prerequisite=PROC -Buildable=yes -Strength=1000 -Armor=wood -TechLevel=2 -BuildLevel=3 -Sight=10 -Owner=GoodGuy,BadGuy -Cost=1000 -PowerIn=40 -Capturable=yes -Crewed=yes -Powered=yes -Bib=yes - -; SAM site -[SAM] -Prerequisite=HAND -Buildable=yes -Primary=Nike -Burst=yes -Strength=400 -Armor=heavy -TechLevel=6 -BuildLevel=5 -Sight=3 -Owner=BadGuy -Cost=750 -PowerIn=20 -Crewed=yes -Closable=yes -ClosedMultiple=3 -RangeLimit=10 - -; airstrip -[AFLD] -Prerequisite=PROC -Buildable=yes -Strength=1000 -Armor=heavy -TechLevel=2 -BuildLevel=5 -Sight=5 -Owner=BadGuy -Cost=2000 -PowerIn=30 -Capturable=yes -Crewed=yes -Bib=yes - -; power plant -[NUKE] -Prerequisite=FACT -Buildable=yes -Strength=400 -Armor=wood -TechLevel=0 -BuildLevel=1 -Sight=2 -Owner=GoodGuy,BadGuy -Cost=300 -PowerOut=100 -Capturable=yes -Crewed=yes -Bib=yes - -; advanced power plant -[NUK2] -Prerequisite=NUKE -Buildable=yes -Strength=600 -Armor=wood -TechLevel=5 -BuildLevel=13 -Sight=2 -Owner=GoodGuy,BadGuy -Cost=700 -PowerOut=200 -Capturable=yes -Crewed=yes -Bib=yes - -; barracks -[PYLE] -Prerequisite=NUKE -Buildable=yes -Strength=800 -Armor=wood -TechLevel=0 -BuildLevel=1 -Sight=3 -Owner=GoodGuy -Cost=300 -PowerIn=20 -Capturable=yes -Crewed=yes -Bib=yes - -; hand of Nod -[HAND] -Prerequisite=NUKE -Buildable=yes -Strength=800 -Armor=wood -TechLevel=0 -BuildLevel=2 -Sight=3 -Owner=BadGuy -Cost=300 -PowerIn=20 -Capturable=yes -Crewed=yes -Bib=yes - -; repair facility -[FIX] -Prerequisite=NUKE -Buildable=yes -Strength=800 -Armor=wood -TechLevel=5 -BuildLevel=8 -Sight=3 -Owner=GoodGuy,BadGuy -Cost=1200 -PowerIn=30 -Capturable=yes -Crewed=yes -Bib=yes - -; sandbag wall -[SBAG] -Prerequisite=FACT -Buildable=yes -Strength=1 -Armor=none -TechLevel=2 -BuildLevel=5 -Sight=0 -Owner=GoodGuy,BadGuy -Cost=50 -Repairable=no - -; chain link fence -[CYCL] -Prerequisite=FACT -Buildable=yes -Strength=1 -Armor=none -TechLevel=5 -BuildLevel=9 -Cost=75 -Owner=GoodGuy,BadGuy -Sight=0 -Repariable=no - -; concrete wall -[BRIK] -Prerequisite=FACT -Buildable=yes -Strength=1 -Armor=none -TechLevel=7 -BuildLevel=13 -Cost=100 -Owner=GoodGuy,BadGuy -Sight=0 -Repairable=no - -; hospital -[HOSP] -Strength=400 -Armor=wood -TechLevel=99 -Buildlevel=99 -Sight=4 -Power=-20 -Bib=yes -Capturable=true -Crewed=yes - -; bio-research laboratory -[BIO] -Strength=600 -Armor=wood -TechLevel=99 -BuildLevel=99 -Sight=4 -Power=-40 -Bib=yes -Crewed=yes - -; auxiliary decorative building -[MISS] -Strength=400 -Armor=wood -Bib=yes -Capturable=true - -; arcology -[ARCO] -Strength=400 -Armor=wood - -; barb wire fence -[BARB] -Strength=1 -Armor=wood -Cost=50 -Repariable=no -Sight=0 - -; wood fence -[WOOD] -Strength=1 -Repariable=no -Sight=0 - -; civilian structures -[V01] -Strength=400 -Armor=wood -Repariable=no - -[V02] -Strength=400 -Armor=wood -Repariable=no - -[V03] -Strength=400 -Armor=wood -Repariable=no - -[V04] -Strength=400 -Armor=wood -Repariable=no - -[V05] -Strength=400 -Armor=wood -Repariable=no - -[V06] -Strength=400 -Armor=wood -Repariable=no - -[V07] -Strength=400 -Armor=wood -Repariable=no - -[V08] -Strength=400 -Armor=wood -Repariable=no - -[V09] -Strength=400 -Armor=wood -Repariable=no - -[V10] -Strength=400 -Armor=wood -Repariable=no - -[V11] -Strength=400 -Armor=wood -Repariable=no - -[V12] -Strength=400 -Armor=wood -Repariable=no - -[V13] -Strength=400 -Armor=wood -Repariable=no - -[V14] -Strength=400 -Armor=wood -Repariable=no - -[V15] -Strength=400 -Armor=wood -Repariable=no - -[V16] -Strength=400 -Armor=wood -Repariable=no - -[V17] -Strength=400 -Armor=wood -Repariable=no - -[V18] -Strength=400 -Armor=wood -Repariable=no - -[V19] -Strength=400 -Armor=wood -Repariable=no - - -; ******* Weapon Statistics ******* -; The weapons specified here are attached to the various combat -; units and buildings. - -; Anim = animation to display as a firing effect [use 8 for facing-dependant anims] -; Charges = Does it have charge-up-before-firing logic (def=no)? -; Damage = the amount of damage (unattenuated) dealt with every bullet -; Projectile = projectile characteristic to use -; ROF = delay between shots [15 = 1 second at middle speed setting] -; Range = maximum cell range -; Report = sound to play when firing -; Speed = speed of projectile to target (100 is maximum) -; Warhead = warhead to attach to projectile -; Explosion = which explosion set to use when weapon of this type impacts (def=0) -; 0=none, 1=piff, 2=piffs, 3=fire, 4=frags, 5=pops, 6=fireball - -; sniper rifle -[Sniper] -Damage=100 -ROF=40 -Range=5.5 -Projectile=Invisible -Speed=100 -Warhead=HollowPoint -Report=RAMGUN2 -Explosion=1 - -; rapid fire machine gun -[Chaingun] -Damage=25 -ROF=50 -Range=4 -Projectile=Invisible -Speed=100 -Warhead=HE -Report=GUN8 -Explosion=2 -Anim=MINIGUN - -; civilian pistol -[Pistol] -Damage=1 -ROF=7 -Range=1.75 -Projectile=Invisible -Speed=100 -Warhead=SA -Report=GUN18 -Explosion=2 - -; rifle soldier weapons (multiple shots) -[M16] -Damage=15 -ROF=20 -Range=2 -Projectile=Invisible -Speed=100 -Warhead=SA -Report=MGUN2 -Explosion=2 - -; man-packed anti-tank missile (bazooka type) -[Dragon] -Damage=30 -ROF=60 -Range=4 -Projectile=HeatSeeker -Speed=25 -Warhead=AP -Report=BAZOOK1 -Explosion=5 - -; hand-held flame thrower type -[Flamethrower] -Damage=35 -ROF=50 -Range=2 -Projectile=Invisible -Speed=100 -Warhead=Fire -Report=FLAMER2 -Anim=FLAME-N,FLAME-NE,FLAME-E,FLAME-SE,FLAME-S,FLAME-SW,FLAME-W,FLAME-NW - -; tank flame thrower -[FlameTongue] -Damage=50 -ROF=50 -Range=2 -Projectile=Invisible -Speed=100 -Warhead=Fire -Report=FLAMER2 -Anim=FLAME-N,FLAME-NE,FLAME-E,FLAME-SE,FLAME-S,FLAME-SW,FLAME-W,FLAME-NW - -; hand-held chemical spray -[Chemspray] -Damage=80 -ROF=70 -Range=2 -Projectile=Invisible -Speed=100 -Warhead=HE -Report=FLAMER2 -Anim=CHEM-N,CHEM-NE,CHEM-E,CHEM-SE,CHEM-S,CHEM-SW,CHEM-W,CHEM-NW - -; hand grenade -[Grenade] -Damage=50 -ROF=50 -Range=3.25 -Projectile=Lobbed -Speed=5 -Warhead=HE -Explosion=5 - -; small anti-armor cannon -[75mm] -Damage=25 -ROF=60 -Range=4 -Projectile=Cannon -Speed=40 -Warhead=AP -Report=TNKFIRE3 -Explosion=4 -Anim=GUNFIRE - -; medium anti-armor cannon -[105mm] -Damage=30 -ROF=50 -Range=4.75 -Projectile=Cannon -Speed=40 -Warhead=AP -Report=TNKFIRE4 -Explosion=4 -Anim=GUNFIRE - -; large anti-armor cannon -[120mm] -Damage=40 -ROF=80 -Range=4.75 -Projectile=Cannon -Speed=40 -Warhead=AP -Report=TNKFIRE6 -Explosion=4 -Anim=GUNFIRE - -; turret cannon -[TurretGun] -Damage=40 -ROF=60 -Range=6 -Projectile=Cannon -Speed=40 -Warhead=AP -Report=TNKFIRE6 -Explosion=4 -Anim=GUNFIRE - -; Vehicle carried anti-tank missile -[MammothTusk] -Damage=75 -ROF=80 -Range=5 -Projectile=HeatSeeker -Speed=30 -Warhead=HE -Report=ROCKET1 -Explosion=4 - -; long-range missile -[227mm] -Damage=75 -ROF=80 -Range=6 -Projectile=HeatSeeker -Speed=20 -Warhead=HE -Report=ROCKET1 -Explosion=4 - -; artillery cannon -[155mm] -Damage=150 -ROF=65 -Range=6 -Projectile=Ballistic -Speed=12 -Warhead=HE -Report=TNKFIRE2 -Explosion=5 -Anim=GUNFIRE - -; vehicle mounted machine gun -[M60] -Damage=15 -ROF=30 -Range=4 -Projectile=Invisible -Speed=100 -Warhead=SA -Report=MGUN11 -Explosion=2 -Anim=MINIGUN - -; long range missile for gunboat -[BoatMissile] -Damage=60 -ROF=35 -Range=8 -Projectile=HeatSeeker -Speed=20 -Warhead=HE -Report=ROCKET2 -Explosion=4 - -; long range missile for guard tower -[Tomahawk] -Damage=60 -ROF=40 -Range=6 -Projectile=HeatSeeker -Speed=25 -Warhead=HE -Report=ROCKET2 -Explosion=4 -Anim=GUNFIRE - -; napalm bomblets (dropped from plane) -[Napalm] -Damage=100 -ROF=5 -Range=4.5 -Projectile=Bomblet -Speed=5 -Warhead=Fire -Explosion=3 - -; obelisk laser -[Laser] -Damage=200 -ROF=90 -Range=7.5 -Projectile=Invisible -Speed=100 -Warhead=Super -Report=OBELRAY1 -Charges=yes - -; anti-aircraft missile (fired from SAM site) -[Nike] -Damage=50 -ROF=50 -Range=15 -Projectile=AAMissile -Speed=40 -Warhead=AP -Report=ROCKET2 -Explosion=6 -Anim=SAMFIRE - -; extreme-range napalm rocket -[HonestJohn] -Damage=100 -ROF=200 -Range=10 -Projectile=FROG -Speed=15 -Warhead=Fire -Report=ROCKET1 -Explosion=3 - -; dinosaur bite 1 -[DinoBite1] -Damage= -ROF= -Range= -Projectile=Invisible -Speed=100 -Warhead=HE -Report= - -; dinosaur bite 2 -[DinoBite2] -Damage= -ROF= -Range= -Projectile=Invisible -Speed=100 -Warhead=HE -Report= - - -; ******* Projectile Statistics ******* -; Projectiles describe how and what image to use as the weapon flies -; to its target. Think of the projectile as the "delivery method" used -; to get the warhead to the desired target. - -; AA = Can this weapon fire upon flying aircraft (def=no)? -; Animates = Does it animate [this means smoke puffs] (def=no)? -; Arcing = Does it have a ballistic trajectory (def=no)? -; Arm = arming delay (def=0) -; Dropping = Does it fall from a starting height (def=no)? -; Frames = number of image frames for animation purposes (def=1) -; Gigundo = Is the projectile larger than normal (def=no)? -; High = Can it fly over walls (def=no)? -; Image = image to use during flight -; Inaccurate = Is it inherently inaccurate (def=no)? -; Inviso = Is the projectile invisible as it travels (def=no)? -; Proximity = Does it blow up when near its target (def=no)? -; ROT = Rate Of Turn [non zero implies homing] (def=0) -; Ranged = Can it run out of fuel (def=no)? -; Rotates = Does the projectile have rotation specific imagery (def=no)? -; Shadow = If High, does this bullet need to have a shadow drawn? (def = yes) -; Translucent = Are translucent colors used in artwork (def=no)? - -; invisible flight to target -[Invisible] -Inviso=yes -Image=none - -; straight high-speed ballistic shot -[Cannon] -Image=120MM - -; Free Rocket Over Ground -[FROG] -Arm=10 -High=yes -Shadow=no -Proximity=yes -Animates=yes -Ranged=yes -Inaccurate=yes -Image=MISSILE -Rotates=yes - -; small homing missile (targets vehicles best) -[HeatSeeker] -Arm=2 -High=yes -Shadow=no -Proximity=yes -Animates=yes -Ranged=yes -Inaccurate=yes -AA=yes -Image=DRAGON -ROT=5 -Rotates=yes -Translucent=yes - -; anti aircraft missile -[AAMissile] -Arm=3 -High=yes -Shadow=no -Proximity=yes -Animates=yes -Ranged=yes -AA=yes -Image=MISSILE -ROT=20 -Rotates=yes -Translucent=yes - -; lobbed tumbling grenade -[Lobbed] -High=yes -Arcing=yes -Inaccurate=yes -Image=BOMB -Frames=8 -Translucent=yes - -; dropped from plane tumbling object -[Bomblet] -Arm=24 -RangeLimit=24 -High=yes -Dropping=yes -Image=BOMBLET -Frames=7 -Translucent=yes - -; arcing ballistic projectile -[Ballistic] -High=yes -Arcing=yes -Inaccurate=yes -Image=120MM - -; Nuclear missile, flying up -[NukeUp] -Gigundo=yes -High=yes -Image=ATOMICUP -Frames=4 - -; Nuclear missile, flying down -[NukeDown] -Gigundo=yes -High=yes -Image=ATOMICDN - - -; ******* Warhead Characteristics ******* -; This is what gives the "rock, paper, scissors" character to the game. -; It describes how the damage is to be applied to the target. The -; values should take into consideration the 'area of effect'. -; example: Although an armor piercing tank round would instantly -; kill a soldier IF it hit, the anti-infantry rating is still -; very low because the tank round has such a limited area of -; effect, lacks pinpoint accuracy, and acknowledges the fact that -; tanks pose little threat to infantry that take cover. - -; Spread = damage spread factor [larger means greater spread] (def=1) -; [A value of 1 means the damage is halved every pixel distant from center point. -; a value of 2 means damage is halved every 2 pixels, etc.] -; Wall = Does this warhead damage concrete walls (def=no)? -; Wood = Does this warhead damage wood walls (def=no)? -; Tiberium = Does this warhead destroy tiberium (def=no)? -; Verses = damage value verses various armor types (as percentage of full damage)... -; -vs- none, wood (buildings), light armor, heavy armor, concrete -; InfDeath = which infantry death animation to use (def=0) -; 0=instant die, 1=twirl die, 2=explodes, 3=flying death, 4=burn death - -; general multiple small arms fire -[SA] -Spread=3 -Verses=100%,50%,50%,25%,25% -InfDeath=1 - -; high explosive (shrapnel) -[HE] -Spread=6 -Wall=yes -Wood=yes -Verses=90%,75%,60%,25%,100% -InfDeath=2 - -; armor piercing (discarding sabot, narrow effect) -[AP] -Spread=3 -Wall=yes -Wood=yes -Verses=30%,75%,75%,100%,50% -InfDeath=3 - -; napalm and fire in general -[Fire] -Spread=8 -Wood=yes -Verses=90%,100%,60%,25%,50% -InfDeath=4 - -; anti-infantry rifle bullet (single shot -- very effective verses infantry) -[HollowPoint] -Spread=1 -Verses=100%,5%,5%,5%,5% -InfDeath=1 - -; special case damage effect (do not use for regular weapons) -[Super] -Spread=1 -Verses=100%,100%,100%,100%,100% -InfDeath=4 - - -; ******* Land Characteristics ******* -; This section specifies the characteristics of the various -; terrain types. The primary purpose is to differentiate the -; movement capabilities. - -; Float = % of full speed for ships [0 means impassable] (def=100) -; Foot = % of full speed for foot soldiers [0 means impassable] (def=100) -; Track = % of full speed for tracked vehicles [0 means impassable] (def=100) -; Wheel = % of full speed for wheeled vehicles [0 means impassable] (def=100) -; Buildable = Can buildings be built upon this terrain (def=no)? - -; clear grassy terrain -[Clear] -Foot=90% -Track=80% -Wheel=60% -Float=0% -Buildable=yes - -; rocky terrain -[Rough] -Foot=80% -Track=70% -Wheel=40% -Float=0% -Buildable=no - -; roads -[Road] -Foot=100% -Track=100% -Wheel=100% -Float=0% -Buildable=yes - -; open water -[Water] -Foot=0% -Track=0% -Wheel=0% -Float=100% -Buildable=no - -; cliffs -[Rock] -Foot=0% -Track=0% -Wheel=0% -Float=0% -Buildable=no - -; walls and other man made obstacles -[Wall] -Foot=0% -Track=0% -Wheel=0% -Float=0% -Buildable=no - -; Tiberium -[Tiberium] -Foot=90% -Track=70% -Wheel=50% -Float=0% -Buildable=no - -; sandy beach -[Beach] -Foot=80% -Track=70% -Wheel=40% -Float=0% -Buildable=no - -; craggy riverbed -[River] -Foot=0% -Track=0% -Wheel=0% -Float=0% -Buildable=no - - -; ******* Random Crate Powerups ******* -; This specifies the chance for the specified crate powerup to appear -; in a 'random' crate. The chance is expressed in the form of 'shares' -; out of the total shares specified. The second parameter is the animation -; to use when this crate is picked up. The third parameter, if present, specifies -; the data value needed for that crate powerup. They mean different things -; for the different powerups. -[Powerups] -Airstrike=3,DEVIATOR ; air strike one time shot -Cloak=5,STEALTH2 ; enable cloaking on nearby objects -Darkness=1,EMPULSE ; cloak entire radar map -Explosion=5,NONE,500 ; high explosive baddie (damage per explosion) -HealBase=1,INVUN ; all buildings to full strength -ICBM=1,MISSILE2 ; nuke missile one time shot -IonCannon=1,EARTH ; ion cannon one time shot -Money=50,DOLLAR,2000 ; a chunk o' cash (maximum cash) -Napalm=5,NONE,600 ; fire explosion baddie (damage) -Nuke=1,NONE,1000 ; nuke explosion (damage) -Reveal=1,EMPULSE ; reveal entire radar map -Squad=20,NONE ; squad of random infantry -Unit=20,NONE ; vehicle -Visceroid=5,NONE ; visceroid - - -; ******* Mission Control ******* -; This specifies the various general behavior characteristics of -; the missions that objects can be assigned. Each of the game objects must -; be in a mission. The mission behavior is generally hard coded into -; the program, but there are some behavior characteristics that can -; be overridden. Don't modify these. - -; NoThreat = Is its weapons disabled and thus ignored as a potential target until fired upon (def=no)? -; Zombie = Is forced to sit there like a zombie and never recovers (def=no)? -; Recruitable = Can it be recruited into a team or base defense (def=yes)? -; Paralyzed = Is the object frozen in place but can still fire and function (def=no)? -; Retaliate = Is allowed to retaliate while on this mission (def=yes)? -; Scatter = Is allowed to scatter from threats (def=yes)? -; Rate = delay between normal processing (larger = faster game, less responsiveness) -; AARate = anti-aircraft delay rate (if not specifed it uses regular rate). - -; Unit sits still and plays dead. -[Sleep] -Recruitable=no -Zombie=yes -Retaliate=no -Scatter=no -Rate=1 - -; Unit doesn't fire and is not considered a threat. -[Harmless] -Recruitable=no -NoThreat=yes -Retaliate=no -Rate=.5 - -; Just like guard mode, but cannot move. -[Sticky] -Recruitable=no -Paralyzed=yes -Scatter=no -Rate=.016 - -; Special attack mission used by team logic. -[Attack] -Rate=.016 -AARate=.016 - -; Move to destination. -[Move] -Rate=.016 - -; Special move to destination after all other queued moves occur. -[QMove] -Rate=.016 - -; Run away (possibly leave the map). -[Retreat] -Recruitable=no -Retaliate=no -Rate=.1 - -; Sit around and engage any enemy that wanders within weapon range. -[Guard] -Rate=.050 -AARate=.016 - -; Enter building or transport for loading purposes. -[Enter] -Retaliate=no -Recruitable=no -Rate=.016 - -; Engineer entry logic. -[Capture] -Retaliate=no -Recruitable=no -Scatter=no -Rate=.016 - -; Handle harvest tiberium - unload at refinery loop. -[Harvest] -Retaliate=no -Recruitable=no -Scatter=no -Rate=.016 - -; Guard the general area where the unit starts at. -[Area Guard] -Recruitable=no -Rate=.080 -AARate=.032 - -; -[Return] - -; Stop moving and firing at the first available opportunity. -[Stop] - -; -[Ambush] - -; Scan for and attack any enemies whereever they may be. -[Hunt] -Recruitable=no -Retaliate=no -Rate=.016 - -; While dropping off cargo (e.g., APC unloading passengers). -[Unload] -Recruitable=no -Retaliate=no -Scatter=no -Rate=.016 - -; Commando running to place bomb in building. -[Sabotage] -Recruitable=no -Rate=.016 - -; Buildings use this when building up after initial placement. -[Construction] -Recruitable=no -Retaliate=no -Scatter=no - -; Buildings use this when deconstruction after being sold. -[Selling] -Recruitable=no -NoThreat=yes -Retaliate=no -Scatter=no - -; Service depot uses this mission to repair attached object. -[Repair] -Rate=.08 - -; Special team override mission. -[Rescue] -Rate=.016 - -; Temple of Nod special launch missile mission. -[Missile] -Rate=.1 - diff --git a/doc/d2k formatspecs.txt b/doc/d2k formatspecs.txt deleted file mode 100644 index 2c4d747a70..0000000000 --- a/doc/d2k formatspecs.txt +++ /dev/null @@ -1,99 +0,0 @@ -Dune 2000 File Formats Specs. Specially for Programmers, who want make editor(s) for Dune 2000 - -Date: June 8, 2004 - -Author: Roman "Siberian GRemlin" Lotchenov -E-Mail #1: slos@scn.ru -E-Mail #2: SibGRem@rambler.ru -***************************************************************************** -Graphics Resources - .R8 and .R16 - -ImageHeader: Record -ID: Byte; //0 - no data, 1 - picture with pallete, -//2 - picture with current pallete. -Width: LongInt; //Width of picture -Height: LongInt; //Height of picture -X_Offset: LongInt; //Pictures offset on an axis X (from left border(edge) of virtual frame) -Y_Offset: LongInt; //Pictures offset on an axis Y (from top border(edge) of virtual frame) -ImageHandle: LongInt; //Handle to picture (in memory), 0 - image not have picture -PaletteHandle: LongInt; //Handle to pallete (in memory), 0 - image not have pallete, -//and using pallete from palette.bin filr. format - 256*RGB -Bpp: Byte; //Bpp of picture -FrameHeight: Byte; //Height of virtual frame, in which is displayed the picture -FrameWidth: Byte; //Width of virtual frame, in which is displayed the picture -Align: Byte; //Alignment on even border -End; - -There is a matrix(array) of pixels by the size further: -For ImageHeader.Bpp = 8: ImageHeader.Width*ImageHeader.Height -For ImageHeader.Bpp = 16: ImageHeader.Width*ImageHeader.Height*2, -������� � ���� ������ �� ������������. - -If PaletteOffset <> 0 and ImageHeader.ID = 1, then there is Pallete Header and Pallete - -PalHeader: Record -Memory: LongInt; //The memory under a palette was allocated (There is no importance in a file) -PalHandle:LongInt; //Handle to colors array (in memory), if 0 - then game showe error message -End; - -Palette: array[0..511] of byte; //Pallete: 256 records of colors -//Color record: 2 bytes - 5 bit red component, 6 bit green component, -//5 bit blue component - -Warning: In files UI_ENG.R16 and UI_ENG.R8, cuted ImageHeader.ID -Warning: Files UIBB.R8 and UIBB.R16 is only picture(pixels array) without any headers. Width=640, Height=400 - -***************************************************************************** -Sound Resources - [Dune2000 Folder]\Data\GameSFX\SOUND.RS - -HeaderSize: LongInt; //Size of RSoundHeader -RSoundBody: array[0..56] of record -FileName: Char[0..12]; //File name -Zero: Byte; //Always $00 -FileOffset: DWord; //Offfset of WAVE -FileSize: DWord; //Size of Wave file -end; - -***************************************************************************** -Text Resources - [Dune2000 Folder]\Data\UI_Data\TEXT.UIB - -STUIBHeader: record -Strs: DWord; //Count of strings -end; - -STUIBBody: array[0..STUIHeader.Strs] of record -NameCount: Word; //Count of symbols(chars) in string name -StrName: array[0..STUIBBody.NameCount] of char; //String name -StrCount: word; //Count of symbols(chars) in string -Str: array[0..STUIBBody.StrCount] of char; //String -end; - -***************************************************************************** -Fonts Resources - .FNT and .FPL - -FontHeader of record -FontLoadedFlag: byte; //Must be $00 -SpaceSize: byte; //Size of space (in pixels) -FirstSymbol: byte; //Code of first symbol in font -Interval: byte; //Size of interval between symbols (in pixels) -MaxHeight: byte; //Maximum height of symbol -Reserve: array[0..2] of byte; //not used -SymbolsHandle array[0..255] of LongInt; //Handle table to symbols in memory (There is no importance in a file) -end; - -Symbols: array[0..255] of record -Width: LongInt; //Width of symbol -Heigth: LongInt; //Heigth of symvol -Pixels: array[1..(Symbols.Width*Symbols.Heigth)] of byte; -end; - -Warning: FONTCOL.FNT using pallete from FONTCOL.FPL, Format - 256*RGBF, F=Junk! -Warning: [Dune2000 Folder]\Data\BIN\Font.BIN - is sybmol code(index) table(map) - -***************************************************************************** -Thanks to: -Michail Beschetnov for begins in R8 file format description -Magic Team for help with R8 file format and for Dune 2000 Image Converter -be-lam0r for help with FNT, R16 and R8 --=*************=- -Please sorry for my english... \ No newline at end of file diff --git a/doc/launcher.txt b/doc/launcher.txt deleted file mode 100644 index 71bcb999f2..0000000000 --- a/doc/launcher.txt +++ /dev/null @@ -1,60 +0,0 @@ -Crossplatform "Launcher" ideas: - -provides facility for commands like "--install-ra-packages", etc instead of having to reinvent the wheel on each platform. - Command ideas: - --list-mods: Simple list of available mods - - This is already done on game init, just needs pulling somewhere generic - --mod-info : Metadata on specific mod - --list-mod-heirarchy: Like above, but shows mod heirarchy - Is this needed? With a combination of listing and mod info, you can easily build the tree yourself. But if every platform has to do this, we may as well share the code. *shrug* its not a big deal at this stage. - --install-ra-music : Extracts scores.mix and copies it to the ra/packages dir - --install-cnc-music : Copies scores.mix from cnc disk to cnc/packages dir - --download-(ra|cnc)-packages: downloads ds and extracts packages from web - --install-(ra|cnc)-packages : copies required files from ra/cnc cd - -Implementation: - Either separate exe or in the OpenRA.Game executable as a cli interface for modifying - the game install. - Platform specific guis that call the appropriate commands, and launch the game itself. - - Separate Exe: <-- lets go with this for the first version. It can link against Fileformats to get - the mix extraction and mod list stuff. - Pros: - Small - Doesn't clutter main executable with functionality not used elsewhere. - Cons: - - OpenRA.Game executable: - Pros: - - Cons: - -Platform specific gui scope: - -- Allow setting basic settings before launch? (toggle fullscreen is frequently asked for) - This would be a nice feature given setting them in game requires a restart. - Lets limit this to graphical settings. I'd rather not reinvent the wheel for things that - don't need it. - -- Give an overview of installed mods. - -- Install new mods from site/downloaded archive. - -- Install new maps for a mod. - -- Update core game and mods - -- Launch game with a selection of mods. - -- Also allow the user to set custom commandline args - Via GUI selection? Via a textfield below the mods checkbox - That would be unfriendly to a lot of users or is this for "power user" options? - Power users. It can be hidden behind a toggle/pref if necessary. - -Gameplan: - -- Start by building the cli interface, and hook up the existing postinstall scripts to use them - -- Code for listing mods exists, move this into fileformats (for --list-mods) - -- Code for extracting files from mixes exists in fileformats (for --install-ra-music). - -- Copying files: filesystem permissions? Do we require root? How do we handle this? - We do on Windows and Linux at least. Unless we do per user. - -- Is installing files to the support dir acceptable? - For mods, perhaps. For core game: no. - -- Gui launchers can run the cli app with appropriate permissions. cli can be dumb. - -- Require code to download files from intarwebs, and report progress to stdout. - This is about the only non-trivial code that we need to write. Its still relatively trivial. - -- Platform-specific maintainers work on their own launcher later - -- ???? - diff --git a/doc/netcode_rebuild.txt b/doc/netcode_rebuild.txt deleted file mode 100644 index dc49d57ace..0000000000 --- a/doc/netcode_rebuild.txt +++ /dev/null @@ -1,200 +0,0 @@ -Netcode for OpenRA - - Current deficiencies: - bandwidth use to say *nothing*. we have to say nothing _somehow_. - of course, but it's currently the bulk of our cost. it will probably continue to be so. - it's mostly NODELAY'd ACKs, right?~half is reduction by half enough? - enough to host 8p on my link. good enough, then. - port forwarding - versioning - limited to 8 players -- why exactly? other than a dumb check in server? Just the dumb check i think, which i have removed. Untested - there are probably other stupid assumptions. - setting NODELAY doubles our bandwidth usage - various bits of the engine get confused when people drop -- dumb bug. - latency - A <-> server <-> B can longer than it needs to be if A is near B - Peer to peer in some aspect then? - udp makes this easier than current, but still interesting. - server probably still needs to get everything, even if there are other faster - ways some players can get it. - This is sounding like we'd need proper routing algorithms - maybe. i can see "attempt to connect to everyone" being the only useful strategy here, so we can just send our orders over every link we have. (and ask the server to pass on the rest, if neccessary) - need to be careful about how much upstream bandwidth we'd use - at 25fps, saying "no orders this frame" is ~25*28 bytes/sec/player. - even chris' connection can handle that for 8p. - 700B/s/player - that's assuming we remove the '3 ticks per net tick' thing - if we keep that, divide by 3. - - - use JUST udp, or tcp too? the --> server link could easily be TCP (without NODELAY, if necessary) as long as our players graph is fully connected via udp. - can we make udp multicast work? - through the internet..... probably not. - LAN, we might as well broadcast. LAN bandwidth isnt a concern :S nor latency. - - Solutions: - port forwarding - UPNP - fixes the problem on _some_ routers huge pain in the arse to implement - BS, there are OTS libraries we can use with .NET/mono. - UDP+punchthrough - better solution - requires a server with a udp port open and usable. - Can we abuse the master server in some way for this? - on our current host, probably not - - dreamhost: no - - master.open-ra.org: yes - - dchote mentioned that he knows people with a bunch of redundant servers we can use for persistant lobbies. maybe. - can we host ALL internet lobbies on external servers? - - This would be a nice feature. - - Provide a dedicated server for people to run their own. - - versioning - we need at least mod versions + engine version. - - player limit - easily removed - requires lobby upgrades > easy - - NODELAY - tcp latency optimization, but bandwidth pessimization. - do we have the equiv of TCP_CORK sockopt on all platforms? - i don't think so, though we may be able to achieve the same result by toggling NODELAY. - - Extra features? - - game chat <-> irc bridge - - MOTD etc broadcast from master server into game lobbies - - Desync communication from clients to the server (write desync diffs to server.log). - - actively send desync logs to us (for internet games at least) - - AOE(?) style desync detection stream - explain. - chrisf was talking about this a while back, they have a stream that they can insert arbitrary data into to check sync. - i like this plan. - - - -Can we focus first on making our current setup with tcp sane? Or is this more work than throwing everything out and starting again - probably easier to start again; the current server is a quick hack with hacks added :D - dont forget the extra hacks added after that :D -Sounds like every other part of the engine :D - parts of it are good. - also, most of it is 'top-level' stuff that other code doesn't rely on. - -Implementation: - TCP connection to servers run by us; udp between peers. - - what about latency? having N players in NZ, with a server in the US shouldn't make things suck. - - latency will either be - - 'longest path through the udp connection graph' (if we allow routing), or - - longest A <-> server <-> B without a connection A <-> B otherwise. - - ideally, we can get a totally connected graph and this isn't an issue. - server provides punchthrough introduction where necessary - udp provides: - - reliable, order transport. - - because we commonly have N frames of nothing before an order, we can optimise this. - - multiple streams (at least: chat, orders, sync. possibly lobby.) - sync: build arbitrary stream of sync data, send per-frame hashes to the server (only) - send stream for that frame on request - adding to the stream should be as easy as Game.AddToSyncLog( T ) - - who checks sync? how do we get individual players' syncreports together? - Can the server check either hashes or whatever new mechanism, and then send an - order to clients to dump their syncreport? Relying on clients to check is a bit dumb - -> server should be able to drop the players that desync - (who? if there are N distinct groups) - can we split the game into N distinct games, in that case? - drop any one-player games, since we know which client is at fault here. - We can do this in general; the faulty client can either automatically win, - or play a bot on their side. -Open Questions: - what level of connectivity do we _require_ wrt p2p? - can we achieve 100% reliably? - 100% reachable nodes? 100% that we can _directly_ communicate with via udp. - For what reasons do we still need a server? Besides sync checking? - If lobbies are done by an external server controlled by us, user created servers are not really necessary are they? - in the case of a not-100% connected graph, a player quitting may disconnect it. - -> we should never kill a game when a player leaves. - perf degradation is bad but acceptable. - -Protocol: - Handshake: - Client says: "Version, all mod versions available, player state(name,color,etc)" - Server says: "Game id, mods versions required, syncrandom, lobbystate" OR "GTFO" - -- client should be given the option to change mods if required and possible - -- this can be done by noting the required mods, dropping, reiniting appropriately, and connecting again. - The client still needs to be told by the server what it needs, for direct connect. - -- Would this include available slots? - It doesn't need to -> clients can be dumped into an "observers bin" on join, if there - isn't a free slot available - I'm not sure how nice that actually is -- having the server dump players into a - real slot if one is available is nicer, for noobs. - when you want to play with specific people, having some of them be unable to join until you kick someone is undesirable. -> observer bin. let host pro/demote people into/outof full slots. - "Heroes of Newerth" (a dota clone) is kinda like this. - their previous game was kinda a disaster wrt lobby stuff :D - (savage, s2) - HoN's netcode is REALLY nice. fps-style though, so not useful. - overflow into a bin, sure. - Client says : "ACK, NACK"? - --password? --banning? - Connection moves to "Lobby" protocol. - Lobby: - Server says: "assigned slot (as per above discussion), other player details(?)" - -- Player info exchange could be done via UDP at this stage - we probably want to use this stage to _connect_ udp, so probably not. - also, no reason; we care about neither latency nor bandwidth here. - Transfer of maps? mods? - One easy way to do this is for the host to upload to a repository - then the other clients can retrieve the missing bits using WebClient etc. - (Rather than reinventing a bulk transfer protocol) - Need a data structure for info that is needed for the lobby; slots, minimap(?) - Why should they not download everything immediately? maps arent big. - How do existing rts's solve this? - by not having the client determine lobby structure from the map. - (more generally, by not loading the map until game start) - Syncing client info in a less hacky way (currently its a hack that only works in frame 0). yes, we fix that. - - - -protocol stages: - Handshake: - verify versions, password; choose player name/color; client is assigned a clientid - Lobby: - Sync lobby info; alter player name, color, team, etc. - transmit maps and any other transferable but not-currently-present data. - connect udp. - Game: - orders over udp; sync over tcp. - -> Return to Lobby mode at the end of a game (after postgame etc). Drop and reconnect is fine, if its automated. - -Implementation stages: - Handshake: - - This can do nothing, as a first attempt. - Lobby: - - The udp connections are the most interesting bit here. - - As a first attempt, require 100% connectivity. i hate routing. - interesting or "interesting"? - udp punchthrough is the latter. - Do we need this in our first N attempts? - If we want to establish UDP connections with everyone, I imagine so. - We need punchthrough or upnp. (and, excepting broken routers, punchthrough isn't much more difficult. THAT is the "interesting" case.) - - Don't need transferrable data in first attempt. - Game: - - We need reliable, working, ordered, udp data transfer. - - - Other Issues: (to be solved later) - Where does this magical infinite webspace live? - maps are small. - If it's permanent you can't pretend a limit won't ever be hit - it isn't permanent; it only has to last the duration of the server. - Storing the maps indexed by sha is probably a very sane way to do it. - - - - - - - - - - - - - - diff --git a/doc/raff.txt b/doc/raff.txt deleted file mode 100644 index b2bcc2f22d..0000000000 --- a/doc/raff.txt +++ /dev/null @@ -1,988 +0,0 @@ - -THE RED ALERT FILE FORMATS GUIDE - -Release v1.4 -Last Updated: 18th April 1997 -(c) 1997 Gavin Pugh -(email - rascenedit@geocities.com) -(WWW - http://www.geocities.com/TimesSquare/Arcade/5553) - - - - - - The purpose of this guide is to detail the structure of files used -in the Game Red Alert, for use to create utilities or editors. - - Command & Conquer : Red Alert is a trademark and copyright of -Westwood Studios, and is so acknowledged. -Any trademarks not mentioned here are still acknowledged. - - - -If you intend to use quite a bit of this guide in your FAQ or similar -text then I would quite like to hear from you, as I can create a reference -to it in my guide. Also I want be credited if you use parts of this guide in your own. - -Any use of information in this guide should credit the relevant author, -(me in most cases), in such programs as utilities and editors. - -If you have a contribution then please email it to the above address, it'll be more than -welcome, and of course, you'll be credited for it, any help is appreciated. - -Web Site Authors : You are welcome (and encouraged) to have my guide on your page(s), as -long as you do not modify the HTML file in any way whatsoever, and also I request that you include -a link on your site to my site at the address at the bottom of this document. - -Enough of the legal crap, enjoy.... - -MIX Files - -All MIX files I have seen can be used with the old C&C utilites, with the MIX headers -following this format, In Red Alert only the more minor MIX files hidden in the CD -directories follow the normal MIX format, the others are RMIX files. - -+--------+------------------------+------+ -| HEADER | ARRAY OF OFFSETS/SIZES | BODY | -+--------+------------------------+------+ - -struct MIXheader { - WORD NumFiles; //Number Of Files In the MIX - LONG DataSize; //Size Of The Body -}; - -The Array of offsets has one entry for each file: - -struct MIXrec { - LONG FileID; //The ID Of The File, derived from the name of the file - LONG Offset; //Offset Of The FIle From The Start Of The Body - LONG Size; //Size Of The File -}; - -If you know how the ID is calculated, I'd like to hear it, just for completeness. - - -RMIX Files - -However, the two which don't though are : MAIN.MIX and REDALERT.MIX. These both contain -other MIX files which also can't be read by Mixman. -I'll refer to these 'special' MIX files as RMIX from now on, as a few others working -on MIX files have done. - -Here is a list of all the RMIX files I have found: -MAIN.MIX ;Contains most other MIX files -REDALERT.MIX -MOVIES1.MIX -MOVIES2.MIX -GENERAL.MIX -SCORES.MIX -CONQUER.MIX -SPEECH.MIX -SOUNDS.MIX -RUSSIAN.MIX -ALLIES.MIX -LOCAL.MIX -LORES.MIX -HIRES.MIX -NCHIRES.MIX -EDITOR.MIX -EDHI.MIX -EDLO.MIX -TRANSIT.MIX -and SC*.MIX and SS*.MIX, probably used on Counterstrike - -Well, so far I can amount the structure of an RMIX to: - -+--------+------+ -| HEADER | BODY | -+--------+------+ - -The header is an encoded representation of where and how long each file is in -the body section. -The body where all the contained files are, stored one after the other, with -nothing inbetween. -RMIX Header -I can almost definately say that the headers include at least: -* The offsets of the files, from the start of the body. -* The lengths of the files -* And some sort of ID, similar to the C&C one. - -Looking at MAIN.MIX, it is structured like this: - - +--------+-------------+----------+----------- ... - | HEADER | CONQUER.MIX | EDHI.MIX | EDLO.MIX ..... - +--------+-------------+----------+----------- ... -OFFSETS: 0 EC 213903 220D42 222D68 -LENGTHS: EC 213817 D43F 2026 - -Here is the header in HEX View: -00 00 02 00 6E 3A 77 4B 7A BB E8 57 DB 10 8B 77 -EC 67 5C 0C D9 8A 6B 50 47 AC 8D A4 31 FD 0A A1 -EB CF F1 5F 93 19 4D FD C6 49 3F 10 67 A5 7B E2 -5D 11 98 3C B4 D8 35 40 3B 36 E6 B3 13 37 70 9C -3F 3C E0 70 97 47 1F BC CE 1B B0 D1 68 D4 F3 B7 -E2 F6 8A 32 C2 4B 7D BF 43 87 0B 40 63 27 77 9E -9E 94 40 86 9A B6 59 09 15 52 D2 8E FB E6 BA B8 -6A 15 FC 31 5A 1C 4A 9E 54 B3 F6 98 66 24 DB 5E -33 14 82 3D 6E 6B 7C 37 EF 3D 58 83 A5 08 D8 2F -9C A0 D0 86 6F C7 65 5F 56 EF E8 7E 13 5F 08 5A -1E E3 E1 E7 47 0E 72 34 4C 65 BD DD 71 AC 83 FD -4C 4C D2 A3 85 E5 06 C3 55 18 BE FA 70 01 81 F1 -40 31 5E 71 64 BB 54 04 95 1E 51 10 B6 DF 96 6F -71 C4 6A 19 CE 19 DC 3E 85 1C 4B B1 B3 DC 21 79 -D7 B1 65 C1 B8 73 C9 77 A5 14 7B 0C - -(still in progess, I'm uploading my site now, so I'll be stopping here for the mo) - - -RMT Files (TMP files in Red Alert) Thanks To Moritz Mertinkat, (and Andrew Griffin for the Xdim/Ydim Info) - -My Note: These RTM files are used in Red Alert for the map tiles, the 3 theater RMIX files -contain many of these tiles to put over your maps. These tiles are those you can place -using the RA Terrain Editor, but using this method you could also extract the graphics -for the INDOOR theater. - -The header (in pascal): - -TRMTHeader = record - Width : Word; {Width of images, always 24 (18h)} - Height : Word; {Heigth of images, always 24 (18h)} - NumTil : Word; {Number of Tiles} - Unknown1 : Word; - XDim : Word; - YDim : Word; - Size : LongInt; {Size of file} - ImgStart : LongInt; {Start of image-data} - Unknown3 : LongInt; - Unknown4 : LongInt; - Index2 : LongInt; - Unknown5 : LongInt; - Index1 : LongInt; {Offset of "Index"} - end; - - You can use XDim and YDim to determine how the tiles should be used - to construct the uber-tile. For example, say XDim = 3 and YDim = 2, then - the uber-tile would be a 3x2 tile. This is probably only of use when - placing the uber-tile in the first place, as the individual sub-tiles - would be placed when the map is being drawn. XDim and YDim give you the - dimensions of the uber-tile. - - If XDim and YDim are both equal to 1, then there is no uber-tile. If - this RMT file holds more than 1 tile, then they are all individual tiles - and have no special relationship to each other in regards to being parts - of a larger tile. - - Index2-Index1 should be the number of tiles! - - Index1 is an offset for an array of bytes: - Index: ARRAY[1..NumTil] of Byte; - - Every entry in this array which points to a specified tile. - If the entry is 255 (FFh) then the tile is empty! - An example: - If you want to display tile 8 of a RMT-file you have to do - the following: - - open the file - - read the header - - seek to pos. INDEX1 - - read the index - - read the 9th byte of it (for tile 8, because the index - starts with 0!} - - seek to: SizeOf(Header) + Index[9] * (24*24) - - read 576 byte (24*24) and display them! - - close the file - - All the graphics-data is uncompressed! - - -PCX-files (Documentation by Moritz Mertinkat) - -My Note: These PCX files are used for 640x400 images in the Windows 95' version of -Red Alert, where CPS files are used for the 320x200 ones in DOS. - -PCX-Header (in pascal): ------------------------ - - TPCXHeader = RECORD - Signature : Byte; - Version : Byte; - Encoding : Byte; - BitsPixel : Byte; - XMin : Word; - YMin : Word; - XMax : Word; - YMax : Word; - HRes : Word; - VRes : Word; - Palette16 : ARRAY[1..48] of Byte; - Reserved : Byte; - NumPlanes : Byte; - BytesLine : Word; - PalType : Word; - Dummy : ARRAY[1..58] of Byte; - end; - -Description: ------------- - Signature: - 10 = ZSoft PCX-files - - Version: - 0 = PC Paintbrush v2.5 - 2 = Version 2.8 with palette information - 3 = Version 2.8 without palette information - 4 = PC Paintbrush for Windows (Plus for Windows uses Ver 5) - 5 = Version 3.0: Used by Paintbrush in Win3.x and Win95, - Can be used for 24-bit images!! - >>>> NOTE: Version 5 is standard!! - - PalType: - 1 = Color/BW (use this one for 256-color images!) - 2 = Grayscale - - XMin, XMax, YMin and YMax are the image dimensions. - HRes and VRes are the horizantal and vertical Resultion - of the image in DPI. If you create your own PCX-files, set - HRes and VRes to 300. - - The image data is encoded with RLE (Run Length Encoding) and - follows directly after the header. - - -Decoding the PCX-data: ----------------------- -First you have to calculate the X- and Y-dimension of the image. -X-dimension: - Width:= BytesLine*NumPlanes - (But I've seen, that there's another way doing this: - Width:= XMax-XMin+1) - -Y-dimension: - Height:= YMax-YMin+1 - -Now, read a single byte (B1) from the PCX-file. If the top two bits of -this byte (B1) are set, then the remaining six bits show how many times -you have to duplicate the next byte (after B1) in the file. -[That means: If the byte (B1) is > 192, then it is a "Repeat-byte" and - you have to duplicate the next byte (after B1) RepeatByte-192 times] - -If the top two bits are not set, the byte (B1) itself is the data with -a count of one. -[That means: If the byte B1 < 192 then this byte represents a pixel - itself] - -Simply do this with all bytes (and don't forget the linebreaks after -Width decoded bytes). - -If FileSize(PCXFile)-(768+1) = 12 [the byte before the pal-array], -then the following 768 bytes contain the palette information - otherwise -there's no palette. - -(If you have any questions, comments, ect. please email me: - Moritz Mertinkat) - -Some sample-code (in pascal) at: - http://home.t-online.de/home/moehrchen (TP Programmers Page) - (Download-area, "PCX-viewer 4.0b for 256-color-bitmaps") - - -SHP Files -The SHP files are stored in the MIX files. They are used for the units, icons in the sidebar, -structures and other graphics. - -A 6 image SHP would look like: - -[Header][ImgInfo1][ImgInfo2]....[ImgInfo5][ImgInfo6][ImgInfo7][ImgInfo8][THE SHP DATA] - -Note that the two extra Imginfo parts are special, the last one is all nulls, where -the offset in the penultimate one points to the end of the file. - -The header for these SHP files is as follows: - -struct SHPheader { - WORD NumImages; //Number Of Images In SHP file - WORD A; //Unknown (please email me if you know what they are) - WORD B; //Unknown - WORD Width; //Width Of The Images, in pixels - WORD Height; //Height Of The Images, in pixels - LONG C; //Unknown -}; - -Each Image (and those 2 special bits), are represented by a info part here. - -struct ImgInfo { - 3 BYTES Offset; //Offset of image in file - CHAR Format; //Format Of Image (&h80 is Format80, &h40 is Format40, etc..) - WORD RefOff; //Offset of reference image for Format20/40 - WORD RefForm; //Format of reference image -}; - -Note that the Offset field is different from C&C, with it being 3 bytes, the RefOff -field may also be 3 bytes now as well, but the Refform can be a word, so it is most -likely not 3 bytes. - - - - - -Packed Sections - -First, in relation to C&C1 where each cell is represented by 2 bytes, as the total map size in -RA seems to be 128x128 then the binary file for the map which could then be fiddled with and read -by third-party editors would be a 128x128x3 byte binary file (=48k). Note that 3 bytes per cell -in a map section are used in RA. - -(This would definately be needed if an editor was created allowing the creation of INDOOR maps) -To think about.....Maybe putting a 48k SCG01EA.BIN file along with the INI (a'la C&C1), this would -be a solution, but unfortunately the RA terrain editor only handles packed maps :( -(note that NewINIFormat=1 would be needed for this way to work, and the OVERLAY section used instead -of the OverlayPack) - -This would be a 2-part process: - -[MapPack] -1=983704304RREREW84790....... -2=8743907547054......... > Compressed Binary > 48k Map Binary -3=..... 6 8K Chunks In Format80 3 bytes per cell -..... And So On -.. - < 70 chars a line > - - -Aha! Looked in GAME.DAT for the full alphabet and saw: - ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ -(This most probably is the same as Base64, but for completeness, I've decoded it myself) - -Theory: -------- -The GAME.DAT sequence shows that A would be 0, B=1, C=2..... +=62 and /=63 -Each character represents 6 bits, arranged as follows - -6 bits [000000][111111][000000][111111] - -So in the compressed Binary form: - -8 bits [00000011][11110000][00111111] - -The '=' character means take off 2 bits from the byte sequence, this means that -the whole sequence is MOD 8, so doesn't leave any stray bits behind. - -Now all the data can be handled in normal hex byte form. - -This Process In Reverse ------------------------ -If you want to get from the byte sequence to the ASCII string again (maybe for a -map tile placing utility), use this: - -Convert the hex bytes into a long string of bits: (example only here.) - -09 00 00 20 - -00001001 00000000 00000000 00100000 - -00001001000000000000000000100000 - -Then start pulling out 6 bits at a time and compare with the ASCII table I made -earlier until you've got less than 6 bits left. - -ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ -(Where A=0, B=1, C=2,..... +=62, /=63) - -000010 010000 000000 000000 001000 00 - ->>>>>>>> C Q A A I ..... - -So after making 5 characters, there are 2 bits left, Red Alert needs this to be 6 bits, -so you would need another 4 bits. -As you know, each character means 6 bits, and the '=' character means take the last 2 -bits off. -So you would use this idea to pad 4 bits onto the end using 'A=' which means 0000 - -The final string therefore would be: -CQAAIA= - -And remember that 2 bits could also be left behind, you would use 'A==' in this case. - -How To Decode The OverlayPack in HEX Form - -Well, it will produce a 16k binary, with 1 byte representing each cell - -Here is the format of the packed section - -[aa bb cc] 20 [.....] - -Where ccbbaa is the length of the [...] section - -The &h20 may have a special meaning, but I've no idea yet. - -There are two of these in each [OverlayPack], with each representing 8k. - -After a VERY VERY VERY long time, I was able to work out how the [....] -part was coded, just by luck really. Use Format80 to decode this, using -an 8K destination buffer in each case, then join both these together to -get a 16k file. -Look at Appendix A (the Format80 images) for more information on this algorithm. - -This 16k file produced by the algorithm then reads from left to right like this: -+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-+ -+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+ ...... -+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-+ -+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+FF+ ... -+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ -........ - -The top left cell would be offset 0, the one below 128, and the one below -that 256, (the same as the cell number). - -Here is a table of what each Hex represents in the OverlayPacks: -FF - Blank -00 - Sandbags (SBAG) -01 - Chain-link Fence (CYCL) -02 - Concrete Wall (BRIK) -03 - C&C Barbed Wire (FENC) -04 - Wooden Fence (WOOD) -05 - Ore (GOLD01) Most Dense -06 - Ore (GOLD02) The Ore/Gem tiles do not SEEM to be -07 - Ore (GOLD03) any different, but they must be, both -08 - Ore (GOLD04) Least Dense RA and the editor seem to make single -09 - Gems (GEM01) Most Dense cell gem/ore tiles look the same, and -0A - Gems (GEM02) they only look different in clumps. -0B - Gems (GEM03) -0C - Gems (GEM04) Least Dense -0D - Haystacks (V12) -0E - Haystack (V13) -0F - Wheat Field (V14) -10 - Fallow Field (V15) -11 - Corn Field (V16) -12 - Celery Field (V17) -13 - Potato Field (V18) -14 - Circular Thing (FPLS) -15 - Wood Crate (WCRATE) -16 - Silver Crate (SCRATE) -17 - RA Barbed Wire (BARB) -18 - RA Sandbags (exactly same as C&C ones) (SBAG) - -19 -.. - I've only tested 19h and 1Ah, but I assume the rest also crash RA -FE - -I've noticed that the Water Crate (WWCRATE) is missing, I've tried 19h and 1Ah -onto Water tiles, but it still crashes. Also the concrete floor tile (CONC) is -not there either, although if you look at my scenario creation guide, you can -put both these on using the [OVERLAY] section. - -Recompressing Overlay Data To An Overlaypack - - - - -How To Get The 'Compressed' Binary To A Map File - -It is nearly exactly the same as the overlaypacks, - -with 6 [....] parts though instead of the two mentioned above. -The map should be 48k when expanded (i.e 3 bytes per cell, 128x128x3) -Using Format80 again for each [...] section, an 8k destination buffer, -and again, splice all these 6 together to make 48k. - -Here is a simple BASIC-like representation of how it is done: - -DIM MAP(0 to 127,0 to 127,1 to 3) as byte - -FOR Y=0 to 127 - FOR X=0 to 127 - GET 1 BYTE, PUT IT INTO MAP(X,Y,1) - GET 1 BYTE, PUT IT INTO MAP(X,Y,2) - NEXT -NEXT -FOR Y=0 to 127 - FOR X=0 to 127 - GET 1 BYTE, PUT IT INTO MAP(X,Y,3) - NEXT -NEXT - -It is quite strange, but It's Westwood's solution to use more than 256 tiles, -which was the limit in C&C. - -Well the hex from the new 48k file is 3 bytes per cell, with them meaning -the following : - -[ xx xx ] [ xx ] -Tile I.D. Part Of That Tile - To Show In That Cell - -Here are some of them, I'll probably get round to doing a full list sometime, -but I havent checked the old C&C resources for this *yet*. - -Remember the Tile ID is a word, so I've switched it round (as you should), just -in case you think it looks wrong :) - -TILE ID NO. OF PARTS -------- ------------ -FFFF ? - Blank Tile -0001 ? - Water - -Recompressing Map Data back into a MapPack - - - - -Appendix A : Format80/40/20 Images (thanks to Vladan Bato) - -I will call the three image formats Format80, Format40 and Format20. - -The Format80 images are compressed with a compression method I'll explain -later. - -The Format40 images must be xor-ed with a Format80 image. That's what the -RefOffs and RefForm fields are used for. They tell which Format80 image they -are based upon. The Format40 will be explained in detail later. - -The Format20 images use the same format as the Format40, the difference is -that they are xor-ed with the image that precedes them in the file. That can -be either in Format20 or in Format40. -The RefOffs field contains the number of the first Format40 image in the -chain, and the RefForm field is always 4800h. - -Here's an example : - -0) Off0 8000h 0000h 0000h -1) Off1 8000h 0000h 0000h -2) Off2 4000h Off1 8000h -3) Off3 8000h 0000h 0000h -4) Off4 4000h Off1 8000h -5) Off5 2000h 0400h 4800h -6) Off6 2000h 0400h 4800h -7) Off7 4000h Off3 8000h - -For example to draw image 7, you have to draw the image 3 first (whose offset -and format are given) and then xor image 7 over it. - -To draw image 6, you have to xor it over the previous image, i.e. 5, which is -format20 again, that means that it has to be xor-ed over image 4, which is in -format40, i.e. it must be xor-ed over the image in format80 it has a reference -to. In this case it's image 1. Thus the chain is 1,4,5,6. -This is one way to see it, the other could be : -Image 6 is in Format20, the RefOffs field contains the number of the first -Format40 image in the chain, in this case image 4. To draw Image 4, the Image -1 has to be drawn first, next is image 4, and then all the images from the 4th -to the 6th have to be xor-ed over the previous. - -I made some experiments and found out that you don't have to use the Format40 -and Format20 images. I tried converting all of them into Format80 and it -worked. - -Also, when changing graphics, note that all the unit and structure graphics -should be drawn using the GDI colors, which will be automatically converted -for the other sides. -The palette you should use is one of those found in DESERT.MIX, WINTER.MIX -and TEMPERAT.MIX. The GDI colors are colors 0B0h-0BFh. The other colors -won't be converted and will remain the same for all the sides (be sure to -use only the colors that are the same all three palettes). - -The above applies only to the graphics that appear in all three theaters -(the .SHP file found in CONQUER.MIX). The graphics for the structures and -overlays that appear in a single theater (found inside the theater specific -MIX) can use the palette entries that are unique for that theater (and will -be shown with garbled colors in the others). - -Also a special color is used for shadows. It's color 04h. In the palettes -it's bright green, but C&C puts a shadow instead of it. I don't know how -the shadows are calculated however. - -You should've noticed that the array has NumImages+2 elements when only -NumImages elements are needed. The last one contains zeros, and the one before -that points to the end of the file. These two can be used to identify the file -as a .SHP. - -Here's the description of the compression formats : Format80 and Format40. - ----------- - Format80 ----------- - -There are several different commands, with different sizes : form 1 to 5 -bytes. -The positions mentioned below always refer to the destination buffer (i.e. -the uncompressed image). The relative positions are relative to the current -position in the destination buffer, which is one byte beyond the last written -byte. - -I will give some sample code at the end. - -(1) 1 byte - +---+---+---+---+---+---+---+---+ - | 1 | 0 | | | | | | | - +---+---+---+---+---+---+---+---+ - \_______________________/ - | - Count - - This one means : copy next Count bytes as is from Source to Dest. - -(2) 2 bytes - +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ - | 0 | | | | | | | | | | | | | | | | | - +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ - \___________/\__________________________________________________/ - | | - Count-3 Relative Pos. - - This means copy Count bytes from Dest at Current Pos.-Rel. Pos. to - Current position. - Note that you have to add 3 to the number you find in the bits 4-6 of the - first byte to obtain the Count. - Note that if the Rel. Pos. is 1, that means repeat Count times the previous - byte. - -(3) 3 bytes - +---+---+---+---+---+---+---+---+ +---------------+---------------+ - | 1 | 1 | | | | | | | | | | - +---+---+---+---+---+---+---+---+ +---------------+---------------+ - \_______________________/ Pos - | - Count-3 - - Copy Count bytes from Pos, where Pos is absolute from the start of the - destination buffer. (Pos is a word, that means that the images can't be - larger than 64K) - -(4) 4 bytes - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+ - | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | | | | | | - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+ - Count Color - - Write Color Count times. - (Count is a word, color is a byte) - -(5) 5 bytes - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+-------+ - | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | | | | | | - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+-------+ - Count Pos - - Copy Count bytes from Dest. starting at Pos. Pos is absolute from the start - of the Destination buffer. - Both Count and Pos are words. - -These are all the commands I found out. Maybe there are other ones, but I -haven't seen them yet. - -All the images end with a 80h command. - -To make things more clearer here's a piece of code that will uncompress the -image. - - DP = destination pointer - SP = source pointer - Source and Dest are the two buffers - - - SP:=0; - DP:=0; - repeat - Com:=Source[SP]; - inc(SP); - b7:=Com shr 7; {b7 is bit 7 of Com} - case b7 of - 0 : begin {copy command (2)} - {Count is bits 4-6 + 3} - Count:=(Com and $7F) shr 4 + 3; - {Position is bits 0-3, with bits 0-7 of next byte} - Posit:=(Com and $0F) shl 8+Source[SP]; - Inc(SP); - {Starting pos=Cur pos. - calculated value} - Posit:=DP-Posit; - for i:=Posit to Posit+Count-1 do - begin - Dest[DP]:=Dest[i]; - Inc(DP); - end; - end; - 1 : begin - {Check bit 6 of Com} - b6:=(Com and $40) shr 6; - case b6 of - 0 : begin {Copy as is command (1)} - Count:=Com and $3F; {mask 2 topmost bits} - if Count=0 then break; {EOF marker} - for i:=1 to Count do - begin - Dest[DP]:=Source[SP]; - Inc(DP); - Inc(SP); - end; - end; - 1 : begin {large copy, very large copy and fill commands} - {Count = (bits 0-5 of Com) +3} - {if Com=FEh then fill, if Com=FFh then very large copy} - Count:=Com and $3F; - if Count<$3E then {large copy (3)} - begin - Inc(Count,3); - {Next word = pos. from start of image} - Posit:=Word(Source[SP]); - Inc(SP,2); - for i:=Posit to Posit+Count-1 do - begin - Dest[DP]:=Dest[i]; - Inc(DP); - end; - end - else if Count=$3F then {very large copy (5)} - begin - {next 2 words are Count and Pos} - Count:=Word(Source[SP]); - Posit:=Word(Source[SP+2]); - Inc(SP,4); - for i:=Posit to Posit+Count-1 do - begin - Dest[DP]:=Dest[i]; - Inc(DP); - end; - end else - begin {Count=$3E, fill (4)} - {Next word is count, the byte after is color} - Count:=Word(Source[SP]); - Inc(SP,2); - b:=Source[SP]; - Inc(SP); - for i:=0 to Count-1 do - begin - Dest[DP]:=b; - inc(DP); - end; - end; - end; - end; - end; - end; - until false; - -Note that you won't be able to compile this code, because the typecasting -won't work. (But I'm sure you'll be able to fix it). - - ----------- - Format40 ----------- - -As I said before the images in Format40 must be xor-ed over a previous image, -or against a black screen (as in the .WSA format). -It is used when there are only minor changes between an image and a following -one. - -Here I'll assume that the old image is in Dest, and that the Dest pointer is -set to the beginning of that buffer. - -As for the Format80, there are many commands : - - -(1) 1 byte - byte - +---+---+---+---+---+---+---+---+ - | 1 | | | | | | | | - +---+---+---+---+---+---+---+---+ - \___________________________/ - | - Count - - Skip count bytes in Dest (move the pointer forward). - -(2) 3 bytes - byte word - +---+---+---+---+---+---+---+---+ +---+-----+-------+ - | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 0 | ... | | - +---+---+---+---+---+---+---+---+ +---+-----+-------+ - \_____________/ - | - Count - - Skip count bytes. - -(3) 3 bytes - byte word - +---+---+---+---+---+---+---+---+ +---+---+-----+-------+ - | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 0 | ... | | - +---+---+---+---+---+---+---+---+ +---+---+-----+-------+ - \_____________/ - | - Count - - Xor next count bytes. That means xor count bytes from Source with bytes - in Dest. - -(4) 4 bytes - byte word byte - +---+---+---+---+---+---+---+---+ +---+---+-----+-------+ +-------+ - | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 1 | ... | | | | - +---+---+---+---+---+---+---+---+ +---+---+-----+-------+ +-------+ - \_____________/ value - | - Count - - Xor next count bytes in Dest with value. - -5) 1 byte - byte - +---+---+---+---+---+---+---+---+ - | 0 | | | | | | | | - +---+---+---+---+---+---+---+---+ - \___________________________/ - | - Count - - Xor next count bytes from source with dest. - -6) 3 bytes - byte byte byte - +---+---+---+---+---+---+---+---+ +-------+ +-------+ - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | - +---+---+---+---+---+---+---+---+ +-------+ +-------+ - Count Value - - Xor next count bytes with value. - - -All images end with a 80h 00h 00h command. - -I think these are all the commands, but there might be some other. -If you find anything new, please e-mail me. - -As before here's some code : - - DP = destination pointer - SP = source pointer - Source is buffer containing the Format40 data - Dest is the buffer containing the image over which the second has - to be xor-ed - - - SP:=0; - DP:=0; - repeat - Com:=Source[SP]; - Inc(SP); - - if (Com and $80)<>0 then {if bit 7 set} - begin - if Com<>$80 then {small skip command (1)} - begin - Count:=Com and $7F; - Inc(DP,Count); - end - else {Big commands} - begin - Count:=Word(Source[SP]); - if Count=0 then break; - Inc(SP,2); - - Tc:=(Count and $C000) shr 14; {Tc=two topmost bits of count} - - case Tc of - 0,1 : begin {Big skip (2)} - Inc(DP,Count); - end; - 2 : begin {big xor (3)} - Count:=Count and $3FFF; - for i:=1 to Count do - begin - Dest[DP]:=Dest[DP] xor Source[SP]; - Inc(DP); - Inc(SP); - end; - end; - 3 : begin {big repeated xor (4)} - Count:=Count and $3FFF; - b:=Source[SP]; - Inc(SP); - for i:=1 to Count do - begin - Dest[DP]:=Dest[DP] xor b; - Inc(DP); - end; - end; - end; - end; - end else {xor command} - begin - Count:=Com; - if Count=0 then - begin {repeated xor (6)} - Count:=Source[SP]; - Inc(SP); - b:=Source[SP]; - Inc(SP); - for i:=1 to Count do - begin - Dest[DP]:=Dest[DP] xor b; - Inc(DP); - end; - end else {copy xor (5)} - for i:=1 to Count do - begin - Dest[DP]:=Dest[DP] xor Source[SP]; - Inc(DP); - Inc(SP); - end; - end; - until false; - - - - -Appendix B : CPS Files -The .CPS files contain 320x200x256 images. The images are compressed with the -Format80 compression method. They may or may not contain a palette. - -The header has the following structure : - - Header : record - Size : word; {File size - 2} - Unknown : word; {Always 0004h} - ImSize : word; {Size of uncompressed image (always 0FA00h)} - Palette : longint; {Is there a palette ?} - end; - -If Palette is 03000000h then there's a palette after the header, otherwise -the image follows. -CPS file without palette can be found in the SETUP.MIX file, and they all use -the Palette that can be found inside the same .MIX. - -The image that follows the palette (or the Header) is in Format80 which is -explained above. - -My Note : The CPS files contain all the full screen Red Alert Images, where -PCX files are used for the 640x400 images used in the Windows '95 version. - - -Thanks to: -Westwood for making the great game - -Everyone who contributed to the "Scenario Creation Guide" - -Mike Cocca for help on the MapPacks. - -Moritz Mertinkat for writing RA-MiXer 3.0, I found this very -handy when looking for the offsets, as I myself only could find the SHP files reliably :), and for the RMT/PCX info! - -Vladan Bato for the C&C Format80/40/20 images -and for the great work on the old C&C MIX files. - -Andrew Griffin for the correction of the RMT files. - -Anyone who thinks they deserve it. - - - -Also, email me if you see anything that is wrong, or missing, or should be included, I'll -give you credit for that particular part of course :) - - -You'll find the latest version of this text here: -http://www.geocities.com/TimesSquare/Arcade/5553 - - -(c)Gavin Pugh 1997 -rascenedit@geocities.com diff --git a/doc/shp dune 2.txt b/doc/shp dune 2.txt deleted file mode 100644 index ec9e467f95..0000000000 --- a/doc/shp dune 2.txt +++ /dev/null @@ -1,57 +0,0 @@ -====================== -Dune 2 SHP file format -====================== -Sourced from Red Horizon Utilities by Emanuel Rabina -http://www.ultraq.net.nz/redhorizon/ - -The Dune 2 SHP file, is a multiple image filetype, where each image can have -it's own set of dimensions. The file is structured as follows: - -File header: - NumImages (2 bytes) - the number of images in the file - Offsets[NumImages + 1] - offset to the image header for an image. The last - (2 or 4 bytes each) offset points to the end of the file. The offsets - don't take into account the NumImages bytes at the - beginning, so add 2 bytes to the offset value to - get the actual position of an image header in the - file - -The size of the offsets can be either 2 or 4 bytes. There is no simple way -to determine which it will be, but checking the file's 4th byte to see if -it's 0, seems to be a commonly accepted practice amongst existing Dune 2 SHP -file readers: - -eg: A 2-byte offset file: 01 00 06 00 EC 00 45 0A ... - A 4-byte offset file: 01 00 08 00 00 00 EC 00 ... - ^^ -The marked byte will be 0 in 4-byte offset files, non 0 in 2-byte offset -files. -Lastly, like C&C SHP files, there is an extra offset, pointing to the end of -the file (or what would have been the position of another image header/data -pair). - -Following the file header, are a series of image header & image data pairs. -The image header is structured as follows: - -Image header: - Flags (2 bytes) - flags to identify the type of data following the - Datasize field, and/or the compression schemes used - Slices (1 byte) - number of Format2 slices used to encode the image - data. Often this is the same as the height of the - image - Width (2 bytes) - width of the image - Height (1 byte) - height of the image - Filesize (2 bytes) - size of the image data in the file - Datasize (2 bytes) - size of the image data when Format2 encoded/compressed - -Regarding the flags, there seem to be 4 values: - - 00000000 (0) = Decompress with Format80, then Format2 - - 00000001 (1) = (see 3) - - 00000010 (2) = Decompress with Format2 - - 00000011 (3) = A small 16-byte lookup table follows, and the image data - should be decompressed with Format80 then Format2. - - 00000101 (5) = The first byte gives the size of the lookup table that - follows, and the image data should be decompressed with - Format80 then Format2. - -And after this image header is the image data. diff --git a/doc/singleplayermaps.txt b/doc/singleplayermaps.txt deleted file mode 100644 index e47fe01028..0000000000 --- a/doc/singleplayermaps.txt +++ /dev/null @@ -1,855 +0,0 @@ -Chapter II - -Editing the .ini file - -by mgP - - -****************************** - -Introduction - -Now that you have finished making your map with CCMap, you may wish to learn -some things about the .ini file. - -Oh yeah... I almost forgot. You are probably asking, `What is an .ini file?'. -Well, every time you save your map to your hard drive in CCMap, it saves it -in two files. One is a file with a .map extension, which is always at 8K -(8192 bytes). This .map file contains information on the location and type of -all the map tiles in your mission. The other file is the .ini file, and is -probably much more important. It saves everything else you put on your map, -such as Tiberium, structures, infantry, units, trees, concrete walls, etc. -The .ini file can be edited through a text editor, such as MS-DOS Edit or -Notepad. By adding new sections to the .ini file, your mission can become -more advanced. The computer opponent(s) can create teams of units to attack -you at time intervals, or drop a load of engineers on a Chinook every once -in a while. Maybe they will fire an Ion Cannon at you once you attack their -base, or maybe launch a nuke at you when you attack their Temple of Nod. - -That all sounds pretty cool, huh? Well there's more. You can change the -environment your mission is in, the size of the map you play on, the video -and text briefings you get, and many other things. All of this is done by -editing the .ini file. In this chapter, I'll show you how to do just that, -and give you some examples of other things. Another thing: there is one -drawback to the .ini file. If it exceeds 16 or 17K, you'll start to miss -some things from your mission. Maybe some triggers will disappear, then some -Tiberium, then some units, then... - -I am now going to start. Each of the following chapters is a part of the .ini -file, and the heading of each .ini file part is the chapter name. In each, I -will give an example of what it might look like in your .ini file. In some, -I will also give a syntax, the order the variables for the example. - -****************************** - -ALSO, IF YOU HAVE ANY QUESTIONS ABOUT ANYTHING HERE, OR ANYTHING NOT -LISTED HERE, DO NOT EMAIL ME. INSTEAD, ASK THEM AT OUR WEB BOARD AT -http://www.io.org/~isarog/c-c/php.cgi/~isarog/c-c/wwwboard/wwwboard2.html - -****************************** - - Table of Contents - 1. BASIC - 2. MAP - 3. WAYPOINTS - 4. [GOODGUY], [BADGUY], [NEUTRAL], [SPECIAL], [MULTI1 - MULTI6] - 5. TERRAIN - 6. OVERLAY - 7. SMUDGE - 8. UNITS - 9. INFANTRY - 10. STRUCTURES - 11. BASE - 12. CELLTRIGGERS - 13. TRIGGERS - 14. TEAMTYPES - 15. BRIEFING - - 16. You're done! - -****************************** - -1. BASIC - -The BASIC section is the first part of the .ini file. This tells of the -videos played before and after the mission, what side the player is, the -name of the mission, and some things which are unknown. - -Example: - -[BASIC] -CarryOverCap=-1 1 -CarryOverMoney=35 2 -Intro=X 3 -BuildLevel=13 4 -Theme=No Theme 5 -Percent=30 6 -Player=BadGuy 7 -Action=X 8 -Lose=X 9 -Win=X 10 -Brief=X 11 -Name=Terrorists in the Village 12 - -Definition: - -1. CarryOverCap: Unknown. -2. CarryOverMoney: The amount of credits carried over from the previous - mission divided by 100. So 35 equals 3500 credits. However, I have found - this not to be the case.. I think it is the percent of credits carried - over from the previous mission. -3. Intro: The introductory video played before the mission starts. See the - ccmovies.txt file for valid entries. Put an 'x' for no video. -4. BuildLevel: Changing this number does not really affect what you can build - in the game. The maximum value for this number is 99. A good way to be - able to build most things is replace a mission far in the game with your - mission. -5. Theme: What song is playing when the mission starts. Many to choose from. - See the ccsongs.txt file for valid entries. -6. Percent: Unknown. -7. Player: This is the side you will play as in your mission: - GoodGuy=GDI - BadGuy=Nod - Neutral=Civilians - Special=GDI and Nod stuff can be built by this team - Multi1-Multi6=Individual teams, multiplayer teams -8. Action: A video played before the mission, but after the one in Intro. - See the ccmovies.txt file for valid entries. Put an 'x' for no video. -9. Lose: The video played if you lose the mission. See the ccmovies.txt file - for valid entries. Put an 'x' for no video. -10. Win: The video played if you win the mission. See the ccmovies.txt file - for valid entries. Put an 'x' for no video. -11. Brief: The briefing video... Many too choose from. See the ccmovies.txt - file for valid entries. Put an 'x' for no video. -12. Name: This is for Covert Operations owners only. It will show up as this - name and it will show up in the `New Missions' list. Command & Conquer - owners without Covert Ops can put a name here also to specify the name - of their mission. - -****************************** - -2. MAP - -The MAP section of the .ini file tells of how big the map is going to be, -and the environment you will be in. - -Example: - -[MAP] -Height=35 1 -Width=30 2 -X=1 3 -Y=1 4 -Theater=Winter 5 - -Definition: - -1. Height: Change this number to change the height of the map in your - mission. 64 is the maximum, but never go above 62. If you exceed 62, - Antanovs and A-10s will be stuck at the border of the map when they fly - in from the sides / top and bottom. Also, if you exceed 63, CCMap will - lock up. -2. Width: Change this number to change the width of the map in your mission. - 64 is the maximum, but never go above 62. If you exceed 62, Antanovs and - A10s will be stuck at the border of the map when they fly in from the - sides / top and bottom. Also, if you exceed 63, CCMap will lock up. -3. X: The horizontal position of the top-left corner of the map. Values - range from 0 - 2. A value other than 1 lets you view the extra 1 cell - border on a 62x62 map. -4. Y: The vertical position of the top-left corner of the map. Values range - from 0 - 2. A value other than 1 lets you view the extra 1 cell border - on a 62x62 cell map. -5. Theater: The mission environment. Choose from Desert, Temperate, or - Winter. - -Note: It is best to change the Height and the Width values of your mission -before you actually create the mission with CCMap. This will adjust the size -map you are creating. It is also a good idea to change the Theater value -before you make your map. Changing theater values in the middle, or after -you create your mission, can mess up the map. - -****************************** - -3. WAYPOINTS - -Waypoints are used in the TeamType section. All waypoints are actually cell -numbers, but instead of using the actual cell number, C&C will look up the -cell number in the appropriate waypoint. There are a total of 32 waypoints, -from 0 through 31, which you can define as you wish (as cell numbers). Most -missions have at least 27 waypoints. But three waypoints serve a specific -purpose: - -- Waypoint 25: The yellow flare is always lit at this waypoint if - designated. -- Waypoint 26: The cell at the top left corner of the screen when the - mission starts. This is so you don't end up with a black screen at the - start of the mission, and have to go searching around a dark map until - you find one of your units. -- Waypoint 27: This waypoint is the default drop cell for Chinooks and APCs - if no 'Unload' command is specified. - -If a waypoint has a value of '-1' it is unused. - -Syntax: Waypoint=Cell number it represents - -Example: - -10=1377 -^^ ^^ -1 2 - -Definition: -1. 10: The waypoint # 10. -2. 1377: The cell number waypoint 10 represents. - -****************************** - -4. [GOODGUY], [BADGUY], [NEUTRAL], [SPECIAL], [MULTI1 - MULTI6] - -The sections GOODGUY, BADGUY, NEUTRAL, SPECIAL, MULTI1 - MULTI6 are very -important. Each of these sections tells of each side, including their allies, -starting credits, what edge of the map reinforcements come from, and some -unknown things. - -Example: - -[BadGuy] -Flaghome=0 1 -FlagLocation=0 2 -MaxBuilding=70 3 -MaxUnit=150 4 -Allies=BadGuy, Special 5 -Edge=East 6 -Credits=70 7 - -Definition: - -1. Flaghome: Unknown. -2. FlagLocation: Unknown. -3. MaxBuilding: Unknown. -4. MaxUnit: Unknown. -5. Allies: This tells who your allies are. They won't attack you in your - mission. You can have multiple entries here. -6. Edge: Reinforcements by APC, and Chinook come from this side of the map. - Hovercraft always come from the south. -7. Credits: This number is the number of credits this side starts with, - divided by 100. So the 70 equals 7000 credits. - -****************************** - -5. TERRAIN - -The TERRAIN section has the type and location of all the terrain tiles in -your map. CCMap will handle all this for you. It is to complicated to put -in these entries manually, and too complicated to explain. - -****************************** - -6. OVERLAY - -This OVERLAY section has the type and location of all the overlay tiles in -your map. They include Tiberium, crates, sandbag walls, chainlink fences, -concrete walls, wooden fences, and barbed wire. - -Syntax: Cell number=Overlay - -Example: - -541=TI12 - ^ ^^ - 1 2 - -Definition: - -1. 541: The cell number this overlay tile is located in. -2. TI12: Tiberium with a density rating of 12. - -Other overlay entries go like this: - - WCRATE: Wooden crate containing 2000 Tiberium credits. - SCRATE: A steel crate containing one of the three parts to the nuke. - TI1: Tiberium with a density rating of 1. - TI2: Tiberium with a density rating of 2. - TI3: Tiberium with a density rating of 3. - TI4: Tiberium with a density rating of 4. - TI5: Tiberium with a density rating of 5. - TI6: Tiberium with a density rating of 6. - TI7: Tiberium with a density rating of 7. - TI8: Tiberium with a density rating of 8. - TI9: Tiberium with a density rating of 9. - TI10: Tiberium with a density rating of 10. - TI11: Tiberium with a density rating of 11. - TI12: Tiberium with a density rating of 12. - BRIK: Concrete wall. - SBAG: Sandbag wall. - CYCL: Chainlink fence. - BARB: Barbed wire. - WOOD: Wooden fence. - -****************************** - -7. SMUDGE - -Entries in SMUDGE are bomb craters (like the ones Adv. Guard Tower missiles -leave in the ground after they fire) and scorch marks (like the ones on the -ground after a nuke has hit, or when a flame tank scorches the ground). -These craters and scorch marks do not show up in CCMap, but will appear in -the mission. You will have to add these manually. - -Syntax: Cell number=Smudge mark. - -Example: - -964=SC4 - ^ ^ - 1 2 - -Definition: - -1. 964: The cell number this smudge is in. -2. SC4: The type of smudge mark. SC1 through SC6 are scorch-marks, and CR1 - through CR6 are bomb craters. - -****************************** - -8. UNITS - -The UNITS section has the entries for all of the units which are on the map -when the mission starts. - -Syntax: Number on list=Owner,Type of Unit,Health,Cell number,Direction, -Action,Associated Trigger. - -Example: - -006=GoodGuy,HTNK,256,512,96,Area Guard,att1 - ^ ^^^^^ ^^ ^ ^ ^^ ^^^^^^ ^^ - 1 2 3 4 5 6 7 8 - -Definition: - -1. 006: The number on the list of units in the units section. -2. GoodGuy: Owner of the unit. Possible teams are: - GoodGuy=GDI - BadGuy=Nod - Neutral=Civilians - Special=GDI and Nod stuff can be built by this team - Multi1-Multi6=Individual teams, multiplayer teams -3. HTNK: What type of unit it is: a Heavy Tank (Mammoth Tank). Choose from: - VICE: Viceroid - FTNK: Flame Tank - STNK: Stealth Tank - LTNK: Light Tank - MTNK: Medium Tank - HTNK: Heavy Tank (Mammoth Tank) - MHQ: Mobile Headquarters - LST: Hovercraft - MRLS: Honest John Rocket Launcher - ARTY: Mobile Artillery - HARV: Harvester - MCV: Mobile Construction Vehicle - JEEP: Humm-Vee - BGGY: Nod Buggy - BIKE: Recon Bike - MSAM: Mobile Rocket Launcher - APC: Assault Personnel Carrier (APC) - BOAT: Gunboat - TRIC: Triceratops - TREX: Tyrannosaurus Rex - RAPT: Velociraptor - STEG: Stegosaurus -4. 256: Health of the unit. - 256=Maximum health. - 1=Basicially dead. -5. 512: Cell number the unit is located at. -6. 96: Direction the unit is facing. Choose from: - 0=North - 32=North-East - 64=East - 96=South-East - 128=South - 160=South-West - 192=West - 224=North-West -7. Area Guard: Action he undertakes during the mission. Choose from: - Area Guard : Guard an area of a few cells around the infantry / unit. - Attack Base : Attack the enemy base (give Engineers this command to - take over buildings). - Attack Civil. : Attack all civilians. - Attack Tarcom : Unknown. - Attack Units : Attack the enemy units and infantry. - Defend Base : Unit / Infantry will defend it's base from enemy attacks. - Guard : Unit will only guard a one cell radius, and will only attack - units which attack it. - Harvest : Gather Tiberium... Harvesters only. - Hunt : Will seek out enemies as long as he is alive. - None : No action undertaken by the unit / infantry. - Rampage : Like Attack Units, but the unit will attack targets more - wisely. - Retreat : Unknown. Maybe it has something to do with when the units - are attacked, they will retreat to a waypoint? - Return : Unknown. Maybe the same action as retreat? - Sticky : The unit will stay in it's starting cell, regardless of - anything. -8. Att1: The trigger associated with the unit. Put 'None' for no trigger to - be associated. - -****************************** - -9. INFANTRY - -The INFANTRY section has the entries for all the infantry on the map when -the mission starts. - -Syntax: Number on list=Owner,Type of Infantry,Health,Cell number, -Sub-Cell number,Action,Direction,Associated Trigger. - -Example: - -011=GoodGuy,RMBO,256,950,3,Hunt,64,die7 - ^ ^^^^^ ^^ ^ ^ ^ ^^ ^^ ^^ - 1 2 3 4 5 6 7 8 9 - -Definition: - -1. 011: Number on the list. -2. GoodGuy: Owner of the infantry. Possible teams are: - GoodGuy=GDI - BadGuy=Nod - Neutral=Civilians - Special=GDI and Nod stuff can be built by this team - Multi1-Multi6=Individual teams, multiplayer teams -3. RMBO: Type of infantry. Choose from: - RMBO: Commando - DELPHI: Agent Delphi - C1-C10: Civilians - E1: Minigunner - E2: Grenadier - E3: Bazooka Troop - E4: Flame-thrower Troop - E5: Chemical Warrior - E6: Engineer -4. 256: Health of the infantry. - 256=Maximum health. - 1=Basicially dead. -5. 950: The cell number the infantry is located at. -6. 3: The sub-cell number the infantry is in. 5 infantry can be in one cell, - thus sub-cell number values of 0 - 4. -7. Hunt: Action he undertakes during the mission. - Area Guard : Guard an area of a few cells around the infantry / unit. - Attack Base : Attack the enemy base (give Engineers this command to - take over buildings). - Attack Civil. : Attack all civilians. - Attack Tarcom : Unknown. - Attack Units : Attack the enemy units and infantry. - Defend Base : Unit / Infantry will defend it's base from enemy attacks. - Guard : Unit will only guard a one cell radius, and will only attack - units which attack it. - Harvest : Gather Tiberium... Harvesters only. - Hunt : Will seek out enemies as long as he is alive. - None : No action undertaken by the unit / infantry. - Rampage : Like Attack Units, but the unit will attack targets more - wisely. - Retreat : Unknown. Maybe it has something to do with when the units - are attacked, they will retreat to a waypoint? - Return : Unknown. Maybe the same action as retreat? - Sticky : The unit will stay in it's starting cell, regardless of - anything. -8. 64: Direction which the infantry is facing. - 0=North - 64=East - 128=South - 192=West -9. die7: The trigger associated with the infantry. Put `None' for no trigger - to be associated. - -****************************** - -10. STRUCTURES - -The STRUCTURES section of the .ini file has the data for all the structures, -or buildings, in the mission. - -Syntax: Number on list=Owner,Structure type,Health,Cell number,Direction, -Associated Trigger. - -Example: - -021=BadGuy,AFLD,256,1668,0,Atk1 - ^ ^^^^ ^^ ^ ^^ ^ ^^ - 1 2 3 4 5 6 7 - -Definition: - -1. 021: It's number on the list of structures in the structure section. -2. BadGuy: The owner of the structure. Possible teams are: - GoodGuy=GDI - BadGuy=Nod - Neutral=Civilians - Special=GDI and Nod stuff can be built by this team - Multi1-Multi6=Individual teams, multiplayer teams -3. AFLD: The type of structure: an Airfield. Choose from: - TMPL: Temple of Nod - EYE: Advanced Communications Center - WEAP: Weapons Factory - GTWR: Guard Tower - ATWR: Advanced Guard Tower - OBLI: Obelisk of Light - GUN: Gun Turret - FACT: Construction Yard - PROC: Tiberium Refinery - SILO: Tiberium Silo - HPAD: Helipad (Nod Apaches and GDI Orca pads) - HQ: Communications Center - SAM: Sam Site - AFLD: Airstrip - NUKE: Power Plant - NUK2: Advanced Power Plant - HOSP: Hospital - BIO: Biotech Lab - PYLE: Barracks - HNOD: Hand of Nod - ARCO: Civilian Water Pump - FIX: Repair Bay - MISS: Technology Center / Prison - V01 - V37: Civilian Buildings -4. 256: The health of the structure. - 256=Full Health - 1=Basicially Dead. -5. 1668: The cell number the structure is in. -6. 0: The direction the structure is facing. For structures, this is only - useful with Nod Gun Turrets. Here are possible values: - 0=North - 32=North-East - 64=East - 96=South-East - 128=South - 160=South-West - 192=West - 224=North-West -7. Atk1: A trigger associated with the structure. Put 'None' for no trigger - to be associated with the structure. - -****************************** - -11. BASE - -The BASE section defines which structures the computer is to rebuild. This -section of the .ini file is not done by CCMap, but by a utility called -BaseIt. It is included with CCTools, but can be downloaded off the Internet -as a single, separate utility. - -Syntax: Number on list=What to Rebuild,Number - -Example: - -013=GUN,956312320 - ^ ^ ^^^^^ - 1 2 3 - -Definition: - -1. 13: Number on the list. -2. GUN: Type of structure to rebuild. -3. 956312320: A strange number which defines where to rebuild the structure. - -****************************** - -12. CELLTRIGGERS - -CELLTRIGGERS are very unique. When you cross a certain cell, the associated -trigger is activated. With this, you can have reinforcements arrive when you -cross bridges, a nuke hit your base when you enter their base, and many other -things. - -Syntax: Cell number=Associated Trigger - -Example: - -2054=drop - ^^ ^^ - 1 2 - -Definition: - -1. 2054: The cell which must be crossed for the associated trigger to - activate. -2. drop: The associated trigger. This is actually a shortcut to any of the - triggers in the trigger section. - -****************************** - -13. TRIGGERS - -The TRIGGERS section is the part of the .ini file which is probably the most -important. This tells when reinforcements to arrive, what the mission -objectives are, etc. It basically tells what happens when. Some triggers may -be associated with buildings, units, and infantry, but other triggers can -activate upon a certain amount of time passing, if something is built, if -something is attacked or destroyed, or many other things. Some trigger -entries may be associated to TeamType entries. - -Syntax: Trigger Name=Why Activated,What Happens,Counter,Who Activates -Trigger,Associated TeamType Entry,Loop - -Example: - -SPY=Discovered,Ion Cannon,0,BadGuy,dstry,0 - ^ ^^^^^^ ^^^^^^^^ ^ ^^ ^^^ ^ - 1 2 3 4 5 6 7 - -Definition: - -1. SPY: The name of the trigger. These can be anything you want... -2. Discovered: This is why the trigger was activated. For example, this - trigger would be activated if a unit associated with trigger SPY was - discovered by the player. Others entries are: - # Bldgs Dstr. : Trigger activates when the number of buildings in the - counter section are destroyed for the associated side. - # Units Dstr. : Trigger activates when the number of units in the - counter section are destroyed for the associated side. - All Destr. : Trigger activates when everything of the associated side - is destroyed. - Any : Used in association with the Cap=Win/Des=Lose variable. - Attacked : Trigger activates if the associated infantry / structure / - unit is attacked. - Bldgs Destr. : Trigger activates when all buildings of the associated - side have been destroyed. - Built It : Trigger is activated when the specified structure is built. - See the builtit.txt file on how to use this trigger. - Civ. Evac. : Trigger activates when all civilians are evacuated. - Credits : Trigger activates when the number of credits have been - reached in the counter section (credits / 10). - Destroyed : Trigger activates if the associated infantry / structure / - unit has been destroyed. - Discovered: Trigger activates if the associated infantry / structure / - unit has been discovered. - House Discovered : Trigger activates if the associated house (side) - has been seen by the player. - No Factories : Trigger activates if all unit / infantry producing - buildings have been destroyed (Nod: Hand of Nod & Airstrip; GDI: - Barracks & Weapons Factory) for the associated side. - None : Nothing activates the trigger. - Player Enters : Trigger activates when the player enters the cell - associated in the CellTriggers section. - Time : Trigger activates when a certain amount of time units has - passed. - Units Destr. : Trigger activates when all units of the associated - side have been destroyed. -3. Ion Cannon: This is what happened when the trigger is activated. Other - entries are: - Airsrike : A-10 Airstrike occurs. - All to Hunt : When the Trigger is activated, the associated side's - units & infantry go hunting for you. - Allow Win : Even if the Win trigger has been activated, you can not - complete the mission until the Allow Win trigger has been activated. - Autocreate : When the Trigger is activated, the computer player - randomly creates a team from the TeamType section. - Cap=Win/Des=Lose : When the buildings is captured, the mission is won. - If destroyed, you lose the mission. - Create Team : Create the associated TeamType entry (used only with the - 1,0,0,1,0,15,1,0,0, combo). - Dstry Teams : Unknown. But in one .ini file for C&C, I did see a - Teams entry, but no teams were listed. - Dstry Trig 'XXXX' : Destroys the trigger called XXXX. - Dstry Trig 'YYYY' : Destroys the trigger called YYYY. - Dstry Trig 'ZZZZ' : Destroys the trigger called ZZZZ. - DZ at 'Z' : This lights up the yellow flare at Waypoint 25. - Ion Cannon : Ion Cannon is fired. - Lose : You lose the mission when the trigger is activated. - None : Nothing is activated. - Nuclear Missile : Nuclear Missile is fired. - Production : Reproduce destroyed buildings with using BaseIt, enables - the associated side to create teams. - Reinforce. : Reinforcements via A10s, APC, Chinook, Hovercraft, or - rolling off the side of the screen. - Win : You win the mission when the trigger is activated. -4. 0: This is a counter. Depending on your trigger action (entry 2, - Discovered) it can count credits, time, number of buildings destroyed, - and represent what structure is used with the Build It trigger. -5. BadGuy: Who activates the trigger. -6. dstry: TeamType entry associated with the trigger. Put 'None' for no - association. -7. 0: How many times the trigger is activated. - 0=Once. - 1 or 2=Trigger repeats once entry 4 (the counter) is reached again. - -****************************** - -14. TEAMTYPES - -TEAMTYPE entries are hard to understand... they are the entries which were -associated at the end of the Trigger entries. They tell specifically what the -Chinooks drop off, when the Chinooks come in, when APCs drop off, when APCs -come in, when the computer opponent creates teams of units, when A-10 -Airstrikes arrive, and when reinforcements come in off the side of the -screen. - -Syntax: TeamType Name=Team Owner,Number Combo,Number of Units,Units and -Quantity,Number of Actions,Actions. - -Example: - -atck=GoodGuy,1,0,0,1,0,15,1,0,0,2,MTNK:2,RMBO:1,2,Move:5,Attack Base:80,0,0 - ^^ ^^^ ^^^^^^^^^^^^^^^^^^ ^ ^^^^^^^^^^^ ^ ^^^^^^^^^^^^^^^^^^^ - 1 2 3 4 5 6 7 - -Definition: - -1. atck: The TeamType name, as associated to the trigger entries. -2. GoodGuy: The 'owner' of the team. Again, possible values are: - GoodGuy=GDI - BadGuy=Nod - Neutral=Civilians - Special=GDI and Nod stuff can be built by this team - Multi1-Multi6=Individual teams, multiplayer teams -3. 1,0,0,1,0,15,1,0,0,: The number combo. This defines what will happen in - this TeamType entry. Use the following templates: - 1,0,0,1,0,15,1,0,0, or 0,0,0,0,0,15,0,0,0,: Create a team of units. - 0,0,0,0,0,7,0,0,0,: Reinforce by hovercraft, APC, Chinook, or by - rolling off the side of the screen. - 1,0,0,0,0,7,0,0,0,: Reinforce by A10 Airstrike, or by reinforcements - rolling off the side of the screen. See the text file on how to do - that. -4. 2: Number of units / infantry types in the team (not the total quantity). -5. MTNK:2,RMBO:1,: The units / infantry in the team and their quantity. We - know what the MTNK, and RMBO stand for (if you don't, see sections UNITS - and INFANTRY). Notice that each one is followed by a colon, then a - number. The number after the colon is the quantity of the preceding - unit / infantry in the TeamType. So this entry creates 2 Medium tanks and - 1 Commando. -6. 2: Number of actions which they will under take. Here they move to - waypoint 5 then attack your base for 80 time units. The last action - entry should end with ,0,0. Other actions are: - Move : The units / infantry go to the designated waypoint. The - waypoint is the number after the colon. - Loop : Used at the end of all the actions. It will make the actions - loop over and over. Use a 1 after the colon. - Unload : For Chinooks, APCs, and Hovercraft, this command will have - them unload their cargo at the waypoint they are at. First give them - a move command to a specific waypoint, then an unload command with - the waypoint (i.e. Move:7,Unload:7) - Attack Units : Attacks enemy units. The number after the colon is for - how long the units are to attack. - Attack Base : Attacks enemy base (use this command for engineers - unloading off of Chinooks, APCs of Hovercraft to have them attempt - to capture buildings. Commandos do not use their C4 when given this - command). The number after the colon is for how long the units are - to attack. - -****************************** - -15. BRIEFING - -The BRIEFING section is for Covert Operations only. This is the text briefing -given every time you choose a new mission from the New Missions menu, and -the same text given when you Restate your mission objectives. - -Every mission briefing may contain 304 characters. You may split the 304 -characters into 4 lines (76 per line), or have many more lines, but with -less characters per line. - -Here is an example of a BRIEFING section: - - [BRIEFING] - 1=This is an example mission briefing for this document. - 2=Don't put this briefing in your real mission or you're stupid. - 3=If you do, consult your psychiatrist immediately: you are insane. - 4=But don't worry, he can help you. - -For those of you without Covert Ops, below is how you make your mission -briefing. First, remember that set of letters and numbers which are the -prefix to the .ini and .bin files of your mission? For example, say that -mine were SCG12EA. Now, create a new file called MISSION.INI in the -Command & Conquer directory. Edit it through a DOS text editor. I would put -mine to look like this: - - [SCG12EA] - 1=This is an example mission briefing for this document. - 2=Don't put this briefing in your real mission or you're stupid. - 3=If you do, consult your psychiatrist immediately: you are insane. - 4=But don't worry, he can help you. - -Of course, your mission briefing may look (well, I hope it does) much -different then this one. Most likely the text and the combo of letters and -numbers at the top. - -****************************** - -16. You're done! - -Hope this gives you a good idea how to edit your .ini file. If you still -don't understand some things (or maybe a lot of things) visit our WebBoard -and ask around. It's at -http://www.io.org/~isarog/c-c/php.cgi/~isarog/c-c/wwwboard/wwwboard2.html. - -=============================================================================== - Copyright (C) 1996 Mark Smeltzer aka WarZone -============================================================================== - Built It Trigger FAQ - -[1-1] Reasons why you would want to use it -[1-2] A thorough explaination of how to use it -[1-3] An advertisement of sorts for...The Ultimate C&C Startup Program! - *** Note: This is freeware! *** -============================================================================== -[1-1] Reasons why you would want to use the "Built It" trigger: - -* suppose you want the AI to be able to start production when the "player" - creates a specific building (ex. a comm. centre) -* suppose that when a guard tower (etc.) is built you want a bunch of units - to attack -* suppose you want reinforcements to come when the "player" build an - adavanced comm. center -* suppose computer rebuilds its temple then the "player" gets reinforced -* and there are hundreds more! -============================================================================== -[1-2] A thorough explaination of the "Built It" trigger: -*** Note: this is the complicated part *** - -Here's the format: - -aaaa=Built It,bbbb,cccc,dddd,eeee,ffff -ex.= rein=Built It,Reinforce.,0,GoodGuy,rein1,0 - -aaaa= The name of the trigger (whatever you want here) -bbbb= the action the will occur when the structure is built -cccc= This is a number value that represents the sturcture to be rebuilt - - Here are the values: - TMPL = 20 - EYE = 21 - WEAP = 0 - GTWR = 1 - ATWR = 2 - OBLI = 3 - GUN = 5 - FACT = 6 - PROC = 7 - SILO = 8 - HPAD = 9 - HQ = 4 - SAM = 10 - AFLD = 11 - NUKE = 12 - NUK2 = 13 - PYLE = 15 - HAND = 19 - FIX = 17 - Sandbag Wall = 60 * - Chainlink Fence = 61 * - Concrete Wall = 62 * - Barbed Wire = 63 * - Wooden Fence = 64 * - * I haven't tested these...but the numbers are right. - -dddd= which side builds the sturctures that activates the action - *** this can be the computer *** - Possible Values Are: - GoodGuy BadGuy Special Neutral Muilt1 - Muilt6 -eeee= the teamtype to build/reinforce id the action is Reinforce. or - Create Team -ffff= specifies the trigger to loop - 0 = don't loop - < 0 = loop (1 to 9) * - * not sure what the difference in behavior between these numbers's is \ No newline at end of file diff --git a/doc/vqa_frmt.txt b/doc/vqa_frmt.txt deleted file mode 100644 index d6ec5a7589..0000000000 --- a/doc/vqa_frmt.txt +++ /dev/null @@ -1,350 +0,0 @@ -.VQA files -by Aaron Glover (arn@ibm.net) - -Each VQA has a 62-byte header, as follows: - - VQAHeader: record - TextFORM: array[0..3] of Char; {Always 'FORM'} - FileBTF: LongInt; {Reverse - Bytes to follow} - TextWVQAVQHD: array[0..7] of Char; {Always 'WVQAVQHD'} - RStartPos: LongInt; {Reverse - Relative start position} - Unknown1: Word; - Unknown2: Word; - NumFrames: Word; - Width: Word; - Height: Word; - Unknown3: Word; - Unknown4: Word; - Unknown5: Word; - Unknown6: Word; - Unknown7: LongInt; - Unknown8: Word; {This changes} - Unknown9: Word; - Unknown10: Word; - Unknown11: array[0..13] of Char; - end; - -Following the header, there are a number of `sub-files' that each -have a header of 8 bytes. The first four are the name (or type) of -the sub-file, the next four are a reverse LongInt that equals the -number of sub-file data bytes to follow (sub-file size minus sub-file -header size). - -By `reverse LongInt', I mean a 4-byte Integer value stored backwards. -For example, take the the decimal value 77236. In hexadecimal it's -12DB4h, and would be stored in a binary file as the bytes B4 2D 01 -00. As a reverse LongInt, it would be stored as 00 01 2D B4. More -human readable, but not how computers work. - -Some sub-file names seem to start with a null byte (00h). There is a -reason for this, which will become apparent later. Just ignore the -null byte and assume the next one is the start of the sub-file -header. - -So, after the header, you should find the something like the -following sub-files: -FINF -SND2 -SND2 -VQFR -SND2 -VQFR -SND2 -VQFR -SND2 -VQFR -... - -Each VQFR sub-file itself has sub-files. If you treat each VQFR sub- -file as if the `data bytes to follow' value was zero, you should get -something like: -FINF -SND2 -SND2 -VQFR - CBF0 - CBP0 - CPL0 - VPTZ -SND2 -VQFR - CBP0 - VPTZ -SND2 -VQFR - CBP0 - VPTZ -SND2 -VQFR - CBP0 - VPTZ -... - -FINF sub-file type: - -First is a Word value that, if you multiply by two, gives the -position of the first data sub-file (relative to the start of the -VQA), then another Word value that seems to be always 4000h. - -Following that is an array of LongInt values that, when multiplied by -two, give the position of each of the frame data sub-files (relative -to the start of the VQA). Each frame comprises of a SND2 sub-file -and a VQFR sub-file that follows immediately after. - -This is why some of the sub-file names start with a null byte. Since -you have to multiply by two, each offset value must be even. So if -it would normally be odd, a null is inserted as the first byte to -make the sub-file's name offset even. Whew! Try saying that five -times fast! - -The number of elements in the array is FrameNum (from the VQA header) -minus one. - -I've noticed some of the LongInt values in this array are 40000000h -too large. I don't know why this is, at the moment I subtract -40000000h from values over 40000000h, it seems to work OK. - -SND2 sub-file type: - -I bet you've guessed this one. Well, so did I. Audio, right? I've -had a go at decoding them, and they seem to be in the same format as -the .AUD files, but I can't work them out (yet). - -CBF0 sub-file type: - -An array of eight-byte (4x2 pixel) uncompressed screen graphics. -I'll explain what they're used for when we get to the VPTZ sub-file -type. Just remember that it's an array of graphics that measure 4x2 -screen pixels. - -CBP0 sub-file type: - -Eight of these (in frame order) appended together make up a complete -CBF0 sub-file that replaces the previous CBF0 sub-file information. -After you've displayed each eighth frame, you need to replace the -current CBF0 information with the new one you've made up from eight -CBP0 sub-files. Just do it, OK? This will make more sense when we -get to the VPTZ sub-file type. - -CPL0 sub-file type: - -The palette for the VQA file. An array of Red, Green and Blue byte -values (in that order). Note that there are sometimes less than 256 -colours in the palette. - -VPTZ sub-file type: - -Well, here it is. This is the heart of the VQA file, the graphics. -Each VPTZ sub-file is compressed with the Format 80 method as -described later in this document. - -When you decompress a VPTZ sub-file, you get an 80x156 graphic. The -top half (the first 78 lines) is the basis of the finished frame, -while the bottom half is a modifier for the pixels in the top half. - -The final size of each VQA frame is 320x156. With the top half -(basis of the finished frame, remember) being 80x78, you can see that -we need to multiply by four in the X (horizontal) direction, and by -two in the Y (vertical) direction. Imagine that each pixel in the -top half in fact represents eight screen pixels, arranged in a 4x2 -format. - -I must distinguish between pixels and screen pixels. By pixel, I -mean one byte read from the decompressed VPTZ graphic, which, when -displayed on screen, measures 4x2 screen pixels. - -Now, if you view a VQA, you can see that there is a higher resolution -used than each pixel being 4x2 screen pixels. This is where the -bottom half and the CBF0 sub-file type comes in. - -The bottom half is an overlay of modifiers for the top half. That -is, the top-left pixel in the bottom half is a modifier for the top- -left pixel in the top half. The bottom half pixel values range from -00h to 0Fh. - -0Fh means `no modifcation'. The corresponding pixel value in the top -half is copied eight times to produce the 4x2 screen pixel format. - -00-0Eh are modifiers. If you treat these pixel values as the high -byte in a Word value, and treat the corresponding pixel value in the -top half as the low byte, you get the CBF0 array element number of -the 4x2 screen graphic you should display for that pixel. Make -sense? That is how the higher resolution is achieved. - -Perhaps I should clarify. If TopByte is the top half pixel byte -value, and BottomByte is the bottom half pixel byte value, then the -4x2 screen pixel graphic is element number (BottomByte * 256 + -TopByte) in the CBF0 array. - -Just display the frames in order, and presto! You have a VQA movie. - - -Format 80 compression method -by Vladan Bato (bat22@geocities.com) - ----------- - Format80 ----------- - -There are several different commands, with different sizes : form 1 to 5 -bytes. -The positions mentioned below always refer to the destination buffer (i.e. -the uncompressed image). The relative positions are relative to the current -position in the destination buffer, which is one byte beyond the last written -byte. - -I will give some sample code at the end. - -(1) 1 byte - +---+---+---+---+---+---+---+---+ - | 1 | 0 | | | | | | | - +---+---+---+---+---+---+---+---+ - \_______________________/ - | - Count - - This one means : copy next Count bytes as is from Source to Dest. - -(2) 2 bytes - +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ - | 0 | | | | | | | | | | | | | | | | | - +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ - \___________/\__________________________________________________/ - | | - Count-3 Relative Pos. - - This means copy Count bytes from Dest at Current Pos.-Rel. Pos. to - Current position. - Note that you have to add 3 to the number you find in the bits 4-6 of the - first byte to obtain the Count. - Note that if the Rel. Pos. is 1, that means repeat Count times the previous - byte. - -(3) 3 bytes - +---+---+---+---+---+---+---+---+ +---------------+---------------+ - | 1 | 1 | | | | | | | | | | - +---+---+---+---+---+---+---+---+ +---------------+---------------+ - \_______________________/ Pos - | - Count-3 - - Copy Count bytes from Pos, where Pos is absolute from the start of the - destination buffer. (Pos is a word, that means that the images can't be - larger than 64K) - -(4) 4 bytes - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+ - | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | | | | | | - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+ - Count Color - - Write Color Count times. - (Count is a word, color is a byte) - -(5) 5 bytes - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+-------+ - | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | | | | | | - +---+---+---+---+---+---+---+---+ +-------+-------+ +-------+-------+ - Count Pos - - Copy Count bytes from Dest. starting at Pos. Pos is absolute from the start - of the Destination buffer. - Both Count and Pos are words. - -These are all the commands I found out. Maybe there are other ones, but I -haven't seen them yet. - -All the images end with a 80h command. - -To make things more clearer here's a piece of code that will uncompress the -image. - - DP = destination pointer - SP = source pointer - Source and Dest are the two buffers - - - SP:=0; - DP:=0; - repeat - Com:=Source[SP]; - inc(SP); - b7:=Com shr 7; {b7 is bit 7 of Com} - case b7 of - 0 : begin {copy command (2)} - {Count is bits 4-6 + 3} - Count:=(Com and $7F) shr 4 + 3; - {Position is bits 0-3, with bits 0-7 of next byte} - Posit:=(Com and $0F) shl 8+Source[SP]; - Inc(SP); - {Starting pos=Cur pos. - calculated value} - Posit:=DP-Posit; - for i:=Posit to Posit+Count-1 do - begin - Dest[DP]:=Dest[i]; - Inc(DP); - end; - end; - 1 : begin - {Check bit 6 of Com} - b6:=(Com and $40) shr 6; - case b6 of - 0 : begin {Copy as is command (1)} - Count:=Com and $3F; {mask 2 topmost bits} - if Count=0 then break; {EOF marker} - for i:=1 to Count do - begin - Dest[DP]:=Source[SP]; - Inc(DP); - Inc(SP); - end; - end; - 1 : begin {large copy, very large copy and fill commands} - {Count = (bits 0-5 of Com) +3} - {if Com=FEh then fill, if Com=FFh then very large copy} - Count:=Com and $3F; - if Count<$3E then {large copy (3)} - begin - Inc(Count,3); - {Next word = pos. from start of image} - Posit:=Word(Source[SP]); - Inc(SP,2); - for i:=Posit to Posit+Count-1 do - begin - Dest[DP]:=Dest[i]; - Inc(DP); - end; - end - else if Count=$3F then {very large copy (5)} - begin - {next 2 words are Count and Pos} - Count:=Word(Source[SP]); - Posit:=Word(Source[SP+2]); - Inc(SP,4); - for i:=Posit to Posit+Count-1 do - begin - Dest[DP]:=Dest[i]; - Inc(DP); - end; - end else - begin {Count=$3E, fill (4)} - {Next word is count, the byte after is color} - Count:=Word(Source[SP]); - Inc(SP,2); - b:=Source[SP]; - Inc(SP); - for i:=0 to Count-1 do - begin - Dest[DP]:=b; - inc(DP); - end; - end; - end; - end; - end; - end; - until false; - -Note that you won't be able to compile this code, because the typecasting -won't work. (But I'm sure you'll be able to fix it). - diff --git a/doc/vqp_info.txt b/doc/vqp_info.txt deleted file mode 100644 index 1be301809c..0000000000 --- a/doc/vqp_info.txt +++ /dev/null @@ -1,276 +0,0 @@ - - COMMAND & CONQUER GOLD AND C&C: RED ALERT *.VQP FILES - - by Gordan Ugarkovic (ugordan@yahoo.com) - http://members.xoom.com/ugordan - - Revision 1.02 - - Command & Conquer is a trademark of Westwood Studios, Inc. - Command & Conquer is Copyright (C)1995 Westwood Studios, Inc. - Command & Conquer: Red Alert is a trademark of Westwood Studios, Inc. - Command & Conquer: Red Alert is Copyright (C)1995-1999 Westwood Studios, Inc. - -DESCRIPTION: - I used to think that viewing the Red Alert movies in SVGA gives you a higher - resolution, but recently I found out that this is not the case. The movie - resolution remains the same, you simply stretch a low-res movie (320x156 or - 320x200) to double its width (640 pixels) and between two adjacent - horizontal pixels you insert a third one that has a color which is the - average value of the 2 pixels' colors. - When I say average value, I don't mean averaging the indexes to palette, - that would be very easy but incorrect. I mean averaging the COLORS themselves - and finding a color in the palette that most closely matches the desired one. - This process of searching is very slow, so a different method needs to be - applied. - This is where a VQP file comes in. In order to be able to average - (interpolate) colors very fast, one needs a COLOR LOOKUP TABLE. - That is the basic purpose of VQP files: to provide you with the neccessary - color lookup tables. - -FILE FORMAT: - The VQP file format is actually very simple. - First there is a LONG INT (4 bytes) value which represents how many - lookup tables for the corresponding VQA movie the VQP contains. - Since every palette has a different color order, we obviously need a new - lookup table every time the palette changes. - After the value come the lookup tables themselves. Every lookup table is - exactly 32896 bytes long. I will explain why there are 32896 bytes in a - lookup table and not 65536 (256*256) as someone might suspect. - The reason for this is that some of the color values repeat, for example - if you have an interpolation value for [23][176], you don't have to write - the value [176][23] because the values will be the same. This saves space - needed by almost 50% ! - - Let's consider a palette which has 5 colors. - We would have to write the following combinations: - - C1 C2 C1 C2 C1 C2 C1 C2 C1 C2 - ------- ------- ------- ------- ------- - 0 0 1 0 2 0 3 0 4 0 - 1 1 2 1 3 1 4 1 - 2 2 3 2 4 2 - 3 3 4 3 - 4 4 - - Note that none of the combinations repeat. - The number of these combinations is [5+(5+1)]/2 = 15 - Likewise, if we had 256 colors, we would have [256+(256+1)]/2 = 32896 - different color combinations. - - But enough of the math, here is some pseudo-code that will load - the lookup table and fill all the values (it will expand the 32896 bytes - to the full 65536 byte lookup table). - (The lookup table is a 2D array, each dimension having 256 elements): - - for C1 = 0 to 255 do - for C2 = 0 to C1 do - begin - val = GetNextByte; - lookup[C1][C2] = val; - lookup[C2][C1] = val; - end; - - The function GetNextByte should return the next byte from the file - or from the memory buffer. - Every time the palette changes you run that piece of code - to load the correct lookup table and you'll be fine. - - Now, let's say that Left is the color of the left pixel, Right is the - color of the right pixel and Middle is the color we need. We would - get this color value by simply indexing into the lookup table: - - Middle = lookup[Left][Right]; (or lookup[Right][Left], it's the same) - - It is interesting to note that, with these lookup tables, it is - possible to do a full interpolation of the movies, that is, interpolate - in the vertical direction as well, unlike the Red Alert Win95 version - which only interpolates in the horizontal direction. - - Having said that, one can wonder: Where are all the VQPs located? - For SIZZLE.VQA and SIZZLE2.VQA it was easy, but what's with all the - other movies? - - So, I started looking and, well, you know those 8 MB of unknown data - located between the 640x400 VQA start movie and SPEECH.MIX in - REDALERT.MIX... :))) - - Anyway, here goes... - - - REDALERT.MIX OFFSETS OF *.VQP FILES - FOR ALL RED ALERT MOVIES - [ENGLISH RED ALERT VERSION ONLY] - ~~~~~~~ - - Movie names are from FILENAME.TXT by Moritz Mertinkat. - Here is what he has to say about the document: - - - - NOTE: Although the offsets given here are for the English version of - Red Alert, I assume the movie names are the same for all the - other language versions and so is the ordering of the VQPs in - REDALERT.MIX. In the English version, the VQPs follow immediately - after the 640x400 VQA. The first one is one of the copies of VQP - for the Lands of Lore 2 Sneak Peek (See note later in the document). - The next one is for AAGUN, so if you are able to find the VQP for it, - you will probably be able to find all the other offsets because - they are stored in succession, one after the other. - - Movie name Offset (from start of file, decimal) - ----------------------- - AAGUN 16101380 - AFTRMATH 16134280 - AIRFIELD 20279388 - ALLY1 16167180 - ALLY2 16529060 - ALLY4 16561960 - ALLY5 16594860 - ALLY6 16660656 - ALLY8 16693556 - ALLY9 16759352 - ALLY10 16232976 - ALLY10B 16265876 - ALLY11 16298776 - ALLY12 16463260 - ALLY14 16496160 - ALLYEND 16792252 - ALLYMORF 16825152 - APCESCPE 16858052 - ASSESS 16890952 - AVERTED 20410984 - - BATTLE 16923852 - BEACHEAD 20443884 - BINOC 16956752 - BMAP 16989652 - BOMBRUN 20509684 - BRDGTILT 17022552 - - COUNTDWN 20542584 - CRONFAIL 17088352 - CRONTEST 17055452 - - DESTROYR 17121252 - DOUBLE 20575484 - DPTHCHRG 20608384 - DUD 17154152 - - ELEVATOR 17187052 - EXECUTE 20641284 - - FLARE 17219952 - FROZEN 17252852 - - GRVESTNE 17285752 - - LANDING 20707084 - - MASASSLT 17351552 - MCV 17384452 - MCVBRDGE 20739984 - MCV_LAND 17417352 - MIG 20772884 - MOVINGIN 21101848 - MONTPASS 17450252 - MTNKFACT 21134748 - - NUKESTOK 21167648 - - OILDRUM 17483152 - ONTHPRWL 21200548 - OVERRUN 17516052 - - PERISCOP 21233448 - PROLOG 17548952 and 21266348 - - RADRRAID 21792688 - REDINTRO 18075292 and 21825588 - - SEARCH 21858488 - SFROZEN 21891388 - SHIPSINK 18108192 - SHORBOMB 18173992 - SHORBOM1 18141092 - SHORBOM2 18173992 - SITDUCK 21924288 - SLNTSRVC 21957188 - SNOWBOMB 18305584 - SNSTRAFE 22022988 - SOVBATL 22055888 - SOVCEMET 22088788 - SOVFINAL 22121688 - SOVIET1 18338484 - SOVIET2 22450676 - SOVIET3 22483576 - SOVIET4 22516476 - SOVIET5 22549376 - SOVIET6 22582276 - SOVIET7 22615176 - SOVIET8 22648076 - SOVIET9 22746768 - SOVIET10 22286176 - SOVIET11 22319076 - SOVIET12 22351976 - SOVIET13 22384876 - SOVIET14 22417776 - SOVMCV 22812564 - SOVTSTAR 18371384 - SPOTTER 22878364 - SPY 18404284 - STRAFE 22911264 - - TAKE_OFF 22944164 - TANYA1 18437184 - TANYA2 18470084 - TESLA 22977064 - TOOFAR 18502984 - TRINITY 18535884 - - V2ROCKET 23009964 - - - As you can see, even the low-res version of REDINTRO contains a VQP. - - At least 3 VQAs have 2 copies of VQP data (PROLOG, REDINTRO and LoL 2 SP). - I don't know why this is, but the copies appear to be the same. - Clearly a waste of disk space (Lands of Lore 2 SP VQPs are each 1,7 MB !)... - - Apart from the movies listed above, MAIN.MIX also contains a slightly - different version of Lands of Lore 2 Sneak Peek than in the root - of the CDs. As I said, a VQP for this movie exists, and there are 2 copies - of it (offsets 14456576 and 18568784), but they don't contain - lookup data for all 52 palettes, so the last 2 palettes are messed up. - - I don' know why the guys at Westwood even bothered to store this VQA - in MAIN.MIX, when there is one in the root of the CD, obviously - more disk space wasted... :((( - - Also, the VQP for one of the Allied briefings (I think ALLY1) indicates - the corresponding VQA has more palettes than it actually has, but that - shouldn't present a problem. - - If you want to include these offsets in your program, please ask for - my permission. - If you have any questions or comments, feel free e-mail me. - - -------------------------------- - -Gordan Ugarkovic (ugordan@yahoo.com) -27 July 1999. - -[END-OF-FILE] - - - - diff --git a/packaging/package-all.sh b/packaging/package-all.sh index 2e4c4f01db..48ebe935f7 100755 --- a/packaging/package-all.sh +++ b/packaging/package-all.sh @@ -21,12 +21,17 @@ make package # Remove the mdb files that are created during `make` find . -path "*.mdb" -delete +Markdown.pl README.md > README.html +Markdown.pl CONTRIBUTING.md > CONTRIBUTING.html +Markdown.pl DOCUMENTATION.md > DOCUMENTATION.html + # List of files that are packaged on all platforms # Note that the Tao dlls are shipped on all platforms except osx and that # they are now installed to the game directory instead of placed in the gac -FILES="OpenRA.Game.exe OpenRA.Editor.exe OpenRA.Utility.exe OpenRA.Renderer.SdlCommon.dll OpenRA.Renderer.Cg.dll \ -OpenRA.Renderer.Gl.dll OpenRA.Renderer.Null.dll OpenRA.FileFormats.dll FreeSans.ttf FreeSansBold.ttf titles.ttf \ -cg glsl mods/ra mods/cnc mods/d2k COPYING HACKING INSTALL CHANGELOG" +FILES="OpenRA.Game.exe OpenRA.Editor.exe OpenRA.TilesetBuilder.exe OpenRA.Utility.exe OpenRA.FileFormats.dll \ +OpenRA.Renderer.SdlCommon.dll OpenRA.Renderer.Cg.dll OpenRA.Renderer.Gl.dll OpenRA.Renderer.Null.dll \ +FreeSans.ttf FreeSansBold.ttf titles.ttf cg glsl mods/ra mods/cnc mods/d2k \ +README.html CONTRIBUTING.html DOCUMENTATION.html COPYING HACKING INSTALL CHANGELOG" echo "Copying files..." for i in $FILES; do