numToReinforce = rglMax(rglRound(getBattleAdvantageFactor((float)advantage) * numTroops), 1);
float mbMission::getBattleAdvantageFactor(float advantage)
{
return rglClamp((advantage + 15.0f) / 15.0f, 0.2f, 2.5f) * (rglConfig::Battle::fBattleSize * 4.0f + 1.25f);
}
and every frame
void mbMission::spawnEntryGroups()
{
mbMissionTemplate *missionTemplate = getTemplate();
bool done = false;
for (int i = 0; i < 100 && !done; ++i)
{
done = true;
for (int j = 0; j < missionTemplate->m_numGroups; ++j)
{
mbMissionTemplateGroup *group = &missionTemplate->m_groups[j];
if (group->m_flags & mtef_visitor_source && !getSite()->m_visitors[j].m_troopNos.empty() || group->m_availableReinforcements > 0 && !m_usedEntries[j])
{
if (spawnEntryGroup(j))
{
group->m_availableReinforcements--;
group->m_spawnedReinforcements++;
shiftEntryPoint(group->m_entryPointNo);
done = false;
}
}
}
}
}