Knock yourself out:
// Decide which stages will be replaced in hybrid missions
const int hybridReplacement1 = rng.getI2(1, 4);
const int hybridReplacement2 = hybridReplacement1 + 1 + rng.getI2(1, 4);
const int hybridReplacement3 = hybridReplacement2 + 1 + rng.getI2(1, 4);
...
if (pd->perPlanetMissionType == HYBRID)
{
pd->perPlanetMissionType = INVASION; // Default setting
// Certain planets have a chance of being substituted with another type
if (p > 0 // Never replace first stage
&& p < pInfo->numPlanets - 1 // Never replace last stage
&& (p == hybridReplacement1 || p == hybridReplacement2 || p == hybridReplacement3))
{
RandomPick rp;
rp.addEventuality(INVASION, 1);
rp.addEventuality(COMETCHASE, 1);
rp.addEventuality(SUPERNOVA, 1);
rp.addEventuality(METEORSTORM, 1);
rp.addEventuality(FEATHER, 1);
rp.addEventuality(SUPPLYDROID, 0.5);
rp.addEventuality(BOSSRUSH, 0.125);
pd->perPlanetMissionType = rp.pick(&rng).index;
}
}