The single player campaign apparently doesn't allow for a branching mission tree, but due to the way mission cycling is handled, it is (I think) possible to get away with it with a dedicated server.
In the server.cs file for the dedicated server, delete or comment out all the $MissionCycling::Stage* lines except the first one, like so:
$MissionCycling::Stage0 = "A";
Of course, you also need to keep:
$server::Mission = $MissionCycling::Stage0;
Since global variables are persistent through server restarts, you can set the remaining $MissionCycling variables through the mission scripts, rather than the server scripts. So in the A.cs script in /Starsiege/Multiplayer, you might have something like:
if($Winner == "Red")
{
$MissionCycling::Stage1 = "B";
}
else if($Winner == "Blue")
{
$MissionCycling::Stage1 = "C";
}
I did a (very) brief test, wherein I put
$MissionCycling::Stage0 = "A";
$MissionCycling::Stage1 = "B";
into a server.cs dedicated server file, and made copies of the City_On_the_Edge files, naming them A, B and C. In A.cs, I altered onMissionStart to include
marsSounds();
$MissionCycling::Stage1 = "C";
I started up a dedicated server, which began on A.cs as expected. I entered MissionEndConditionMet(); in the console, and the next mission loaded was C.cs.
Some additional work might be helpful to ensure that server restarts don't foul up the branching mission cycling. The easiest way I can think of would be to include something like
fileWrite("Mission.cs", overwrite, "$MissionCycling::Stage0 = "FakeMissionName";" );
and
exec("Mission.cs");
and then use just Stage0 to carry out all the mission branching.
               (
geocities.com/stslabs)