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.