This is an explaination of how the campaigns work in RA2 and YR. The same control files are used in TS and FS, but there are many things that are different and cannot be applied equally between the two. The files you need to be concerned with are battle(md).ini, mission(md).ini and mapsel(md).ini and I will go through the structure of them in turn.
This is a fairly simple file and has only 2 main sections to it, a list of possible campaigns and a few definitions of how those campaigns are set up to start.
This section takes the form of a list starting from 1= and lists all possible campaigns. In RA2 and YR it is pointless adding anything to this list (and infact only the first 3 can ever be used anyway). The 3 listed should be TUT1, ALL1 and SOV1. ALL1 and SOV1 are accessed from the side buttons on the campaign selection screen of either RA2 or YR while TUT1 is the tutorial campaign in unmodified RA2 only (As of Rock Patch v1.06 TUT1 is a customisable 3rd campaign button in YR as well).
These sections are named after the campaigns listed in the [Battles] list. The game is hard coded to access only the 3 named above (this was not the case in TS as it presented a list of campaigns to choose from). It has the following parameters:
CD= This is the CD that must be present to play the campaign. In RA2 it could be 0 (allied disc) or 1 (soviet disc). In YR it is always 2 (yuri disc).
Also can be "-1", which means no disk needs.
Scenario= This is the map filename for the beginning of the campaign. After this map, mission(md).ini and mapsel(md).ini are consulted for what to do next.
FinalMovie= appears not to be used in RA2 or YR, but would play on completing a mission with EndOfGame=yes set in its [Basic] section.
Description= this is the string from the ra2(md).csf file that names the campaign. However it is never displayed in game and is left over from TS where campaigns were listed in a dialog for selection by name.
This file consists of parameters set for each mission map file that are not set in the map itself and consists of sections for each map:
Briefing= .csf string to display when you go to the briefing screen after already entering the mission.
UIName= the name of the string that gives the name of this mission. I am unsure as to when this gets used, though this entry suffixed with 'sav' in the string file is used by the auto save feature to name the save entry.
LSLoadMessage= the name of the string that is used on the load screen to give the mission name
LSLoadBriefing= name of the string used to give the objectives on the load screen for the mission.
LS640BriefLocX= LS640BriefLocY= LS800BriefLocX= LS800BriefLocY= These entries define the top left corner of the region where the briefing objectives are given on the loadscreen they give the X distance (from left edge) and y distance (from top edge) that this corner is placed at and are all set to 20 by convention. They are for the 640x480 and 800x600 loadscreen resolutions respectively. Only the 800 settings are used in YR as the screen resolution is fixed for this screen.
LS640BkgdName= LS800BkgdName= These entries give the name of the .shp file to use for the load screen background (the ones with the maps, side symbol and the unit icons that will feature in the mission). They are again for the different possible screen resolutions but again only the 800x600 is used in YR.
LS800BkgPal= the name of the pallet file used to display the background .shp at the 800x600 resolution. This is only needed in YR where the pallet used is not hardcoded.
This is the most important file for making a custom campaign work correctly, particularly for a Yuri side since by default there are no progression settings for that side set up at all, while soviet and allied sides have campaigns ready defined that you can just overwrite by using the same file names. There are several sections defined that don't actually work in this file and are left over from TS, but that the game might get upset about if you removed. In addition, the game seems to require a side to have a sidenc##.mix file with the old TS assets for the mission select screen. There have been reports that if you get internal errors if you don't have sidenc03.mix and try to make a yuri mission progression. To fix this, copy sidenc02.mix from ra2.mix to the RA2 directory and rename it sidenc03.mix.
[GDI] This section defines mission progression for missions where the player is a house that belongs to the GDI side (allies).
Anims= this gives the name of another section (normally [Anims]) that defines animations that are used in the mission selection screen but does not exist in RA2 or YR.
Sounds= this gives the name of another section (normally [GDISFX]) that defines sounds played on the obsolete mission selection screen.
1= 2= 3= etc.
These list in order of progression the sections that define each mission map and its place in the order of the campaign for GDI they start with [ALL01]
[Nod] This section defines mission progression for missions where the player is a house that belongs to the Nod side (soviets). It contains the same sections as the [GDI] entry and starts its progression at Sov01
[ThirdSide] This section defines mission progression for missions where the player is a house that belongs to the ThirdSide side (yuri) in YR. It does not actually exist in the default mapselmd.ini file, but must be created if you want to make a Yuri campaign work. Without this section, missions that have the player house using ThirdSide will be unable to find the next scenario when they are completed although the first mission can be played from the entries in battlemd.ini. It needs to contain the same sections as the [GDI] and [Nod] entries. Its progression does not have a convention for its mission sections, but I recommend starting with Yur01 (you will need to define [Yur01] further into the file). Duplicate the entries from [Nod] for Anims= and Sounds=.
[XXX##] This is the convention for naming the sections that define what missions fall where in the progression. They are named after the entries in the side progression lists explained above. If you make a [ThirdSide] progression you need to make entries for these yourself.
Scenario= This is the name of the map file this mission will use. It should also have an entry in mission(md).ini to define its load screen and briefings.
Description= Obsolete from TS, refers to an entry from another .ini file? It is recommended to ommit this line for new entries in YR as it is not needed and may cause internal errors when using ThirdSide missions.
VoiceOver= obsolete from TS. Used an AUD file to play a voice over describing the mission on the map select screen.
MapVQ= obsolete, listed a movie file that played an intro to the map selection screen (usually a flyover of the map to the point where the battle was).
Overlay= .shp files overlayed onto the obsolete map screen from TS.
Targets= obsolete...location of where mission selection points appeared on the map
ClickMap= colour map that gave click points based on index colour of area on image. Never seen in game. Entry is obsolete from TS.
- = Name of a scenario section. The number indicates the pallet index on the click map that leads to this scenario when selected in TS. In RA2/YR it appears to be used to indicate the number of the next scenario in the progression and what scenario section that is.