|
@@ -499,48 +499,50 @@ Player *DoStartupNewPlayer(bool is_ai)
|
|
|
p->is_ai = is_ai;
|
|
|
p->ai.state = 5; /* AIS_WANT_NEW_ROUTE */
|
|
|
p->share_owners[0] = p->share_owners[1] = p->share_owners[2] = p->share_owners[3] = OWNER_SPECTATOR;
|
|
|
|
|
|
p->avail_railtypes = GetPlayerRailtypes(p->index);
|
|
|
p->inaugurated_year = _cur_year;
|
|
|
p->face = Random();
|
|
|
|
|
|
/* Engine renewal settings */
|
|
|
p->engine_renew_list = NULL;
|
|
|
p->renew_keep_length = false;
|
|
|
p->engine_renew = false;
|
|
|
p->engine_renew_months = -6;
|
|
|
p->engine_renew_money = 100000;
|
|
|
|
|
|
GeneratePresidentName(p);
|
|
|
|
|
|
InvalidateWindow(WC_GRAPH_LEGEND, 0);
|
|
|
InvalidateWindow(WC_TOOLBAR_MENU, 0);
|
|
|
InvalidateWindow(WC_CLIENT_LIST, 0);
|
|
|
|
|
|
if (is_ai && (!_networking || _network_server) && _ai.enabled)
|
|
|
AI_StartNewAI(p->index);
|
|
|
|
|
|
memset(p->num_engines, 0, TOTAL_NUM_ENGINES);
|
|
|
|
|
|
return p;
|
|
|
}
|
|
|
|
|
|
void StartupPlayers(void)
|
|
|
{
|
|
|
// The AI starts like in the setting with +2 month max
|
|
|
_next_competitor_start = _opt.diff.competitor_start_time * 90 * DAY_TICKS + RandomRange(60 * DAY_TICKS) + 1;
|
|
|
}
|
|
|
|
|
|
static void MaybeStartNewPlayer(void)
|
|
|
{
|
|
|
uint n;
|
|
|
Player *p;
|
|
|
|
|
|
// count number of competitors
|
|
|
n = 0;
|
|
|
FOR_ALL_PLAYERS(p) {
|
|
|
if (p->is_active && p->is_ai) n++;
|
|
|
}
|
|
|
|
|
|
// when there's a lot of computers in game, the probability that a new one starts is lower
|
|
|
if (n < (uint)_opt.diff.max_no_competitors &&
|
|
|
n < (_network_server ?
|
|
|
InteractiveRandomRange(_opt.diff.max_no_competitors + 2) :
|