Large diffs are not rendered by default.

@@ -14,7 +14,7 @@

Window* ShowAIDebugWindow(CompanyID show_company = INVALID_COMPANY);
void ShowAIConfigWindow();
void ShowAIDebugWindowIfAIError();
void ShowAIDebugWindowIfAIError(Owner owner = INVALID_OWNER);
void InitializeAIGui();

#endif /* AI_GUI_HPP */
@@ -70,11 +70,6 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
SQInteger res = ScriptInfo::Constructor(vm, info);
if (res != 0) return res;

ScriptConfigItem config = _start_date_config;
config.name = stredup(config.name);
config.description = stredup(config.description);
info->config_list.push_front(config);

if (info->engine->MethodExists(*info->SQ_instance, "MinVersionToLoad")) {
if (!info->engine->CallIntegerMethod(*info->SQ_instance, "MinVersionToLoad", &info->min_loadable_version, MAX_GET_OPS)) return SQ_ERROR;
} else {
@@ -214,7 +214,7 @@ void AIInstance::Died()
{
ScriptInstance::Died();

ShowAIDebugWindow(_current_company);
ShowAIDebugWindowIfAIError(_current_company);

const AIInfo *info = AIConfig::GetConfig(_current_company, AIConfig::SSS_FORCE_GAME)->GetInfo();
if (info != nullptr) {
@@ -65,8 +65,8 @@ static int32 ClickMoneyCheat(int32 p1, int32 p2)
*/
static int32 ClickChangeCompanyCheat(int32 p1, int32 p2)
{
while ((uint)p1 < Company::GetPoolSize()) {
if (Company::IsValidID((CompanyID)p1)) {
while ((uint)p1 <= COMPANY_SPECTATOR) {
if (Company::IsValidID((CompanyID)p1) || (p1 == COMPANY_SPECTATOR && _settings_client.gui.start_spectator)) {
SetLocalCompany((CompanyID)p1);
return _local_company;
}
@@ -265,7 +265,7 @@ struct CheatWindow : Window {
SetDParam(0, val + 1);
GetString(buf, STR_CHEAT_CHANGE_COMPANY, lastof(buf));
uint offset = 10 + GetStringBoundingBox(buf).width;
DrawCompanyIcon(_local_company, rtl ? text_right - offset - 10 : text_left + offset, y + icon_y_offset + 2);
if (_local_company != COMPANY_SPECTATOR) DrawCompanyIcon(_local_company, rtl ? text_right - offset - 10 : text_left + offset, y + icon_y_offset + 2);
break;
}

@@ -593,26 +593,41 @@ void StartupCompanies()
_next_competitor_start = 0;
}

/** Start a new competitor company if possible. */
static bool MaybeStartNewCompany()
/** Start new competitor companies if possible. */
void MaybeStartNewCompany()
{
if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return false;
/* Count number of total existing companies. */
uint current_companies = (uint)Company::GetNumItems();

/* Count number of existing AI only companies. */
uint current_ais = 0;
Company *c;

/* count number of competitors */
uint n = 0;
FOR_ALL_COMPANIES(c) {
if (c->is_ai) n++;
if (c->is_ai) current_ais++;
}

if (n < (uint)_settings_game.difficulty.max_no_competitors) {
/* Send a command to all clients to start up a new AI.
* Works fine for Multiplayer and Singleplayer */
return DoCommandP(0, CCA_NEW_AI | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL);
/* Compute bitmask of AI companies to start. */
CompanyMask ais_to_start = 0;
for (;;) {
uint count = CountBits(ais_to_start);
if (_networking && current_companies + count >= _settings_client.network.max_companies) break;
if (current_ais + count >= (uint)_settings_game.difficulty.max_no_competitors) break;
if (current_companies + count >= MAX_COMPANIES) break;

CompanyID company = AI::GetStartNextCompany(count);
assert(company != INVALID_COMPANY);
assert(!HasBit(ais_to_start, company));
SetBit(ais_to_start, company);

/* Check if the next AI is also scheduled to start immediately */
if (AI::GetStartNextTime(count + 1) != 0) break;
}

return false;
if (CountBits(ais_to_start) > 0) {
/* Send a command to all clients to start up new AI(s).
* Works fine for Multiplayer and Singleplayer */
DoCommandP(0, CCA_NEW_AI | INVALID_COMPANY << 4 | ais_to_start << 12, 0, CMD_COMPANY_CTRL);
}
}

/** Initialize the pool of companies. */
@@ -713,19 +728,13 @@ void OnTick_Companies()
}

if (_next_competitor_start == 0) {
/* AI::GetStartNextTime() can return 0. */
_next_competitor_start = max(1, AI::GetStartNextTime() * DAY_TICKS);
/* If GetStartNextTime is zero, wait at least a day to re-evaluate.
* This avoids checking every tick if an AI can be started. */
_next_competitor_start = max(DAY_TICKS, AI::GetStartNextTime() * DAY_TICKS);
}

if (_game_mode != GM_MENU && AI::CanStartNew() && --_next_competitor_start == 0) {
/* Allow multiple AIs to possibly start in the same tick. */
do {
if (!MaybeStartNewCompany()) break;

/* In networking mode, we can only send a command to start but it
* didn't execute yet, so we cannot loop. */
if (_networking) break;
} while (AI::GetStartNextTime() == 0);
MaybeStartNewCompany();
}

_cur_company_tick_index = (_cur_company_tick_index + 1) % MAX_COMPANIES;
@@ -807,19 +816,20 @@ void CompanyAdminRemove(CompanyID company_id, CompanyRemoveReason reason)
* @param tile unused
* @param flags operation to perform
* @param p1 various functionality
* - bits 0..15: CompanyCtrlAction
* - bits 16..23: CompanyID
* - bits 24..31: CompanyRemoveReason (with CCA_DELETE)
* - bits 0..3: CompanyCtrlAction
* - bits 4..11: CompanyID
* - bits 12..27: Bitmask of AI companies to start (with CCA_NEW_AI)
* - bits 12..15: CompanyRemoveReason (with CCA_DELETE)
* @param p2 ClientID
* @param text unused
* @return the cost of this operation or an error
*/
CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
{
InvalidateWindowData(WC_COMPANY_LEAGUE, 0, 0);
CompanyID company_id = (CompanyID)GB(p1, 16, 8);
CompanyID company_id = (CompanyID)GB(p1, 4, 8);

switch ((CompanyCtrlAction)GB(p1, 0, 16)) {
switch ((CompanyCtrlAction)GB(p1, 0, 4)) {
case CCA_NEW: { // Create a new company
/* This command is only executed in a multiplayer game */
if (!_networking) return CMD_ERROR;
@@ -870,17 +880,30 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
break;
}

case CCA_NEW_AI: { // Make a new AI company
case CCA_NEW_AI: { // Make new AI companies
CompanyMask ais_to_start = GB(p1, 12, 16);
if (CountBits(ais_to_start) == 0) return CMD_ERROR;

if (!(flags & DC_EXEC)) return CommandCost();

if (company_id != INVALID_COMPANY && (company_id >= MAX_COMPANIES || Company::IsValidID(company_id))) return CMD_ERROR;
Company *c = DoStartupNewCompany(true, company_id);
if (c != nullptr) NetworkServerNewCompany(c, nullptr);
/* If a company index is specified, a reload AI is in progress.
* At this point, ensure it can start in the same company index.
* Note that this check must not be done in test mode, because
* in a network game, the command to delete the company is still
* in the queue, Company::IsValidID would be returning true. */
if (company_id != INVALID_COMPANY && (company_id >= MAX_COMPANIES || !HasExactlyOneBit(ais_to_start) || company_id != FindFirstBit(ais_to_start) || Company::IsValidID(company_id))) return CMD_ERROR;

uint company;
FOR_EACH_SET_BIT(company, ais_to_start) {
if (company_id != INVALID_COMPANY) assert(company == company_id);
Company *c = DoStartupNewCompany(true, (CompanyID)company);
if (c != nullptr) NetworkServerNewCompany(c, nullptr);
}
break;
}

case CCA_DELETE: { // Delete a company
CompanyRemoveReason reason = (CompanyRemoveReason)GB(p1, 24, 8);
CompanyRemoveReason reason = (CompanyRemoveReason)GB(p1, 12, 4);
if (reason >= CRR_END) return CMD_ERROR;

Company *c = Company::GetIfValid(company_id);
@@ -15,6 +15,7 @@
#include "gfx_type.h"
#include "vehicle_type.h"

void MaybeStartNewCompany();
bool MayCompanyTakeOver(CompanyID cbig, CompanyID small);
void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner);
void GetNameOfOwner(Owner owner, TileIndex tile);
@@ -2336,8 +2336,12 @@ struct CompanyWindow : Window
reinit = true;
}

/* Multiplayer buttons. */
plane = ((!_networking) ? (int)SZSP_NONE : (int)(local ? CWP_MP_C_PWD : CWP_MP_C_JOIN));
if (!_networking) {
plane = (int)((!c->is_ai && !local && _local_company == COMPANY_SPECTATOR) ? CWP_MP_C_JOIN : SZSP_NONE);
} else {
/* Multiplayer buttons. */
plane = (int)(local ? CWP_MP_C_PWD : CWP_MP_C_JOIN);
}
wi = this->GetWidget<NWidgetStacked>(WID_C_SELECT_MULTIPLAYER);
if (plane != wi->shown_plane) {
wi->SetDisplayedPlane(plane);
@@ -2615,6 +2619,11 @@ struct CompanyWindow : Window
break;

case WID_C_COMPANY_JOIN: {
if (!_networking) {
if (_local_company == COMPANY_SPECTATOR) SetLocalCompany((CompanyID)this->window_number);
break;
}

this->query_widget = WID_C_COMPANY_JOIN;
CompanyID company = (CompanyID)this->window_number;
if (_network_server) {
@@ -2687,8 +2696,8 @@ struct CompanyWindow : Window

/* If all shares are owned by someone (none by nobody), disable buy button */
this->SetWidgetDisabledState(WID_C_BUY_SHARE, GetAmountOwnedBy(c, INVALID_OWNER) == 0 ||
/* Only 25% left to buy. If the company is human, disable buying it up.. TODO issues! */
(GetAmountOwnedBy(c, INVALID_OWNER) == 1 && !c->is_ai) ||
/* Only 25% left to buy. If the company is human or AI in multiplayer, disable buying it up! */
(GetAmountOwnedBy(c, INVALID_OWNER) == 1 && (!c->is_ai || (c->is_ai && _networking))) ||
/* Spectators cannot do anything of course */
_local_company == COMPANY_SPECTATOR);

@@ -823,7 +823,7 @@ DEF_CONSOLE_CMD(ConResetCompany)
}

/* It is safe to remove this company */
DoCommandP(0, CCA_DELETE | index << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_DELETE | index << 4 | CRR_MANUAL << 12, 0, CMD_COMPANY_CTRL);
IConsolePrint(CC_DEFAULT, "Company deleted.");

return true;
@@ -1161,8 +1161,14 @@ DEF_CONSOLE_CMD(ConStartAI)
}
}

CompanyID company_id = AI::GetStartNextCompany();
if (company_id == INVALID_COMPANY) {
IConsoleWarning("Can't start a new AI (no more free slots).");
return true;
}

/* Start a new AI company */
DoCommandP(0, CCA_NEW_AI | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_NEW_AI | INVALID_COMPANY << 4 | (1 << company_id) << 12, 0, CMD_COMPANY_CTRL);

return true;
}
@@ -1197,8 +1203,8 @@ DEF_CONSOLE_CMD(ConReloadAI)
}

/* First kill the company of the AI, then start a new one. This should start the current AI again */
DoCommandP(0, CCA_DELETE | company_id << 16 | CRR_MANUAL << 24, 0,CMD_COMPANY_CTRL);
DoCommandP(0, CCA_NEW_AI | company_id << 16, 0, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_DELETE | company_id << 4 | CRR_MANUAL << 12, 0, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_NEW_AI | company_id << 4 | (1 << company_id) << 12, 0, CMD_COMPANY_CTRL);
IConsolePrint(CC_DEFAULT, "AI reloaded.");

return true;
@@ -1234,7 +1240,7 @@ DEF_CONSOLE_CMD(ConStopAI)
}

/* Now kill the company of the AI. */
DoCommandP(0, CCA_DELETE | company_id << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_DELETE | company_id << 4 | CRR_MANUAL << 12, 0, CMD_COMPANY_CTRL);
IConsolePrint(CC_DEFAULT, "AI stopped, company deleted.");

return true;
@@ -293,17 +293,10 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
/* In all cases, make spectators of clients connected to that company */
if (_networking) NetworkClientsToSpectators(old_owner);
if (old_owner == _local_company) {
/* Single player cheated to AI company.
* There are no spectators in single player, so we must pick some other company. */
assert(!_networking);
/* Single player company bankrupts. Move player to Spectator. */
assert(!_networking && _settings_client.gui.start_spectator);
Backup<CompanyID> cur_company2(_current_company, FILE_LINE);
Company *c;
FOR_ALL_COMPANIES(c) {
if (c->index != old_owner) {
SetLocalCompany(c->index);
break;
}
}
SetLocalCompany(COMPANY_SPECTATOR);
cur_company2.Restore();
assert(old_owner != _local_company);
}
@@ -622,11 +615,12 @@ static void CompanyCheckBankrupt(Company *c)
* after 9 months (if it still had value after 6 months) */
default:
case 10: {
if (!_networking && _local_company == c->index) {
/* If we are in offline mode, leave the company playing. Eg. there
* is no THE-END, otherwise mark the client as spectator to make sure
* he/she is no long in control of this company. However... when you
* join another company (cheat) the "unowned" company can bankrupt. */
if (!_networking && _local_company == c->index && !_settings_client.gui.start_spectator) {
/* If we are in offline mode and if spectator mode isn't active,
* leave the company playing. Eg. there is no THE-END, otherwise
* mark the client as spectator to make sure he/she is no long
* in control of this company. However... when you join another
* company (cheat) the "unowned" company can bankrupt. */
c->bankrupt_asked = MAX_UVALUE(CompanyMask);
break;
}
@@ -638,10 +632,10 @@ static void CompanyCheckBankrupt(Company *c)
* updating the local company triggers an assert later on. In the
* case of a network game the command will be processed at a time
* that changing the current company is okay. In case of single
* player we are sure (the above check) that we are not the local
* company and thus we won't be moved. */
* player we ensure that the local company remains the same until
* the end of StateGameLoop, where it could be changed. */
if (!_networking || _network_server) {
DoCommandP(0, CCA_DELETE | (c->index << 16) | (CRR_BANKRUPT << 24), 0, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_DELETE | (c->index << 4) | (CRR_BANKRUPT << 12), 0, CMD_COMPANY_CTRL);
return;
}
break;
@@ -660,7 +654,11 @@ static void CompaniesGenStatistics()
/* Check for bankruptcy each month */
Company *c;
FOR_ALL_COMPANIES(c) {
Backup<CompanyID> cur_company(_current_company, FILE_LINE);
Backup<CompanyID> loc_company(_local_company, FILE_LINE);
CompanyCheckBankrupt(c);
loc_company.Restore();
cur_company.Restore();
}

Backup<CompanyID> cur_company(_current_company, FILE_LINE);
@@ -2034,7 +2032,7 @@ CommandCost CmdBuyShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1,
if (GetAmountOwnedBy(c, COMPANY_SPECTATOR) == 0) return cost;

if (GetAmountOwnedBy(c, COMPANY_SPECTATOR) == 1) {
if (!c->is_ai) return cost; // We can not buy out a real company (temporarily). TODO: well, enable it obviously.
if (!c->is_ai || (c->is_ai && _networking)) return cost; // We can not buy out a real or AI company in multiplayer.

if (GetAmountOwnedBy(c, _current_company) == 3 && !MayCompanyTakeOver(_current_company, target_company)) return_cmd_error(STR_ERROR_TOO_MANY_VEHICLES_IN_GAME);
}
@@ -20,9 +20,13 @@
#include "guitimer_func.h"
#include "company_base.h"
#include "ai/ai_info.hpp"
#include "ai/ai.hpp"
#include "ai/ai_instance.hpp"
#include "game/game_info.hpp"
#include "game/game.hpp"
#include "game/game_instance.hpp"
#include "settings_internal.h"
#include "settings_func.h"

#include "widgets/framerate_widget.h"
#include "safeguards.h"
@@ -248,6 +252,39 @@ PerformanceMeasurer::~PerformanceMeasurer()
}
}
_pf_data[this->elem].Add(this->start_time, GetPerformanceTimer());

/* Self-adjust max opcodes for active scripts */
if (this->elem >= PFE_GAMESCRIPT && this->elem <= PFE_AI14) {
uint active_scripts = Game::GetInstance() != nullptr && !Game::GetInstance()->IsDead() && !Game::GetInstance()->IsPaused();
Company *c;
FOR_ALL_COMPANIES(c) {
if (_pause_mode == PM_UNPAUSED && Company::IsValidAiID(c->index) && Company::Get(c->index)->ai_instance != nullptr && !Company::Get(c->index)->ai_instance->IsDead() && !Company::Get(c->index)->ai_instance->IsPaused()) {
active_scripts++;
}
}

if (active_scripts != 0 && (this->elem == PFE_GAMESCRIPT ? Game::GetInstance() != nullptr && !Game::GetInstance()->IsDead() && !Game::GetInstance()->IsPaused() : _pause_mode == PM_UNPAUSED && Company::IsValidAiID((CompanyID)(this->elem - PFE_AI0)) && Company::Get((CompanyID)(this->elem - PFE_AI0))->ai_instance != nullptr && !Company::Get((CompanyID)(this->elem - PFE_AI0))->ai_instance->IsDead() && !Company::Get((CompanyID)(this->elem - PFE_AI0))->ai_instance->IsPaused())) {
uint dummy; // unused
const SettingDesc *sd = GetSettingFromName("script_max_opcode_till_suspend", &dummy);
assert(sd != nullptr);
uint opcodes = this->elem == PFE_GAMESCRIPT ? Game::GetMaxOpCodes() : AI::GetMaxOpCodes((CompanyID)(this->elem - PFE_AI0));
uint value = opcodes;
double avg = min(9999.99, _pf_data[this->elem].GetAverageDurationMilliseconds(GL_RATE));
double all = min(9999.99, _pf_data[PFE_ALLSCRIPTS].GetAverageDurationMilliseconds(GL_RATE));
if (avg * active_scripts > MILLISECONDS_PER_TICK && all > MILLISECONDS_PER_TICK) {
value = Clamp(opcodes - (avg * active_scripts - MILLISECONDS_PER_TICK) * (avg * active_scripts - MILLISECONDS_PER_TICK), sd->desc.min, GetGameSettings().script.script_max_opcode_till_suspend);
} else if (avg > 0 && avg < MILLISECONDS_PER_TICK / 3 || all < MILLISECONDS_PER_TICK / 3) {
value = Clamp(opcodes + MILLISECONDS_PER_TICK / 3 - avg, sd->desc.min, GetGameSettings().script.script_max_opcode_till_suspend);
}
if (value != opcodes) {
if (this->elem == PFE_GAMESCRIPT) {
Game::SetMaxOpCodes(value);
} else {
AI::SetMaxOpCodes((CompanyID)(this->elem - PFE_AI0), value);
}
}
}
}
}

/** Set the rate of expected cycles per second of a performance element. */
@@ -344,6 +381,12 @@ static const char * GetAIName(int ai_index)
return Company::Get(ai_index)->ai_info->GetName();
}

static const char * GetGSName()
{
if (Game::GetInstance() == NULL) return "";
return Game::GetInfo()->GetName();
}

/** @hideinitializer */
static const NWidgetPart _framerate_window_widgets[] = {
NWidget(NWID_HORIZONTAL),
@@ -369,6 +412,7 @@ static const NWidgetPart _framerate_window_widgets[] = {
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_FRW_SEL_MEMORY),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_ALLOCSIZE), SetScrollbar(WID_FRW_SCROLLBAR),
EndContainer(),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_OPCODES), SetScrollbar(WID_FRW_SCROLLBAR),
EndContainer(),
NWidget(WWT_TEXT, COLOUR_GREY, WID_FRW_INFO_DATA_POINTS), SetDataTip(STR_FRAMERATE_DATA_POINTS, 0x0),
EndContainer(),
@@ -548,12 +592,17 @@ struct FramerateWindow : Window {
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
if (_pf_data[e].num_valid == 0) continue;
Dimension line_size;
if (e < PFE_AI0) {
if (e < PFE_GAMESCRIPT || e > PFE_AI14) {
line_size = GetStringBoundingBox(STR_FRAMERATE_GAMELOOP + e);
} else {
SetDParam(0, e - PFE_AI0 + 1);
SetDParamStr(1, GetAIName(e - PFE_AI0));
line_size = GetStringBoundingBox(STR_FRAMERATE_AI);
if (e == PFE_GAMESCRIPT) {
SetDParamStr(0, GetGSName());
line_size = GetStringBoundingBox(STR_FRAMERATE_GAMESCRIPT);
} else {
SetDParam(0, e - PFE_AI0 + 1);
SetDParamStr(1, GetAIName(e - PFE_AI0));
line_size = GetStringBoundingBox(STR_FRAMERATE_AI);
}
}
size->width = max(size->width, line_size.width);
}
@@ -573,6 +622,24 @@ struct FramerateWindow : Window {
resize->height = FONT_HEIGHT_NORMAL;
break;
}

case WID_FRW_OPCODES: {
size->width = 0;
bool any_active = _pf_data[PFE_GAMESCRIPT].num_valid > 0;
for (uint pfe = PFE_AI0; pfe < PFE_MAX; pfe++) any_active |= _pf_data[pfe].num_valid > 0;
Dimension item_size;
item_size.width = 0;
if (any_active) {
*size = GetStringBoundingBox(STR_FRAMERATE_OPCODES);
SetDParam(0, 999999);
item_size = GetStringBoundingBox(STR_FRAMERATE_OPS);
}
size->width = max(size->width, item_size.width);
size->height += FONT_HEIGHT_NORMAL * MIN_ELEMENTS + VSPACING;
resize->width = 0;
resize->height = FONT_HEIGHT_NORMAL;
break;
}
}
}

@@ -599,6 +666,34 @@ struct FramerateWindow : Window {
}
}

void DrawElementMaxOpsColumn(const Rect& r, StringID heading_str) const
{
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
uint16 skip = sb->GetPosition();
int drawable = this->num_displayed;
int y = r.top;
DrawString(r.left, r.right, y, heading_str, TC_FROMSTRING, SA_CENTER, true);
y += FONT_HEIGHT_NORMAL + VSPACING;
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
if (_pf_data[e].num_valid == 0) continue;
if (skip > 0) {
skip--;
} else if (e == PFE_GAMESCRIPT || e >= PFE_AI0) {
uint value = e == PFE_GAMESCRIPT ? Game::GetMaxOpCodes() : AI::GetMaxOpCodes((CompanyID)(e - PFE_AI0));
SetDParam(0, value);
DrawString(r.left, r.right, y, STR_FRAMERATE_OPS, TC_FROMSTRING, SA_RIGHT);
y += FONT_HEIGHT_NORMAL;
drawable--;
if (drawable == 0) break;
} else {
/* skip non-script */
y += FONT_HEIGHT_NORMAL;
drawable--;
if (drawable == 0) break;
}
}
}

void DrawElementAllocationsColumn(const Rect &r) const
{
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
@@ -644,12 +739,17 @@ struct FramerateWindow : Window {
if (skip > 0) {
skip--;
} else {
if (e < PFE_AI0) {
if (e < PFE_GAMESCRIPT || e > PFE_AI14) {
DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + e, TC_FROMSTRING, SA_LEFT);
} else {
SetDParam(0, e - PFE_AI0 + 1);
SetDParamStr(1, GetAIName(e - PFE_AI0));
DrawString(r.left, r.right, y, STR_FRAMERATE_AI, TC_FROMSTRING, SA_LEFT);
if (e == PFE_GAMESCRIPT) {
SetDParamStr(0, GetGSName());
DrawString(r.left, r.right, y, STR_FRAMERATE_GAMESCRIPT, TC_FROMSTRING, SA_LEFT);
} else {
SetDParam(0, e - PFE_AI0 + 1);
SetDParamStr(1, GetAIName(e - PFE_AI0));
DrawString(r.left, r.right, y, STR_FRAMERATE_AI, TC_FROMSTRING, SA_LEFT);
}
}
y += FONT_HEIGHT_NORMAL;
drawable--;
@@ -669,6 +769,10 @@ struct FramerateWindow : Window {
case WID_FRW_ALLOCSIZE:
DrawElementAllocationsColumn(r);
break;
case WID_FRW_OPCODES:
DrawElementMaxOpsColumn(r, STR_FRAMERATE_OPCODES);
break;

}
}

@@ -677,7 +781,8 @@ struct FramerateWindow : Window {
switch (widget) {
case WID_FRW_TIMES_NAMES:
case WID_FRW_TIMES_CURRENT:
case WID_FRW_TIMES_AVERAGE: {
case WID_FRW_TIMES_AVERAGE:
case WID_FRW_OPCODES: {
/* Open time graph windows when clicking detail measurement lines */
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
int line = sb->GetScrolledRowFromWidget(pt.y - FONT_HEIGHT_NORMAL - VSPACING, this, widget, VSPACING, FONT_HEIGHT_NORMAL);
@@ -749,12 +854,19 @@ struct FrametimeGraphWindow : Window {
{
switch (widget) {
case WID_FGW_CAPTION:
if (this->element < PFE_AI0) {
if (this->element < PFE_GAMESCRIPT) {
SetDParam(0, STR_FRAMETIME_CAPTION_GAMELOOP + this->element);
} else {
SetDParam(0, STR_FRAMETIME_CAPTION_AI);
SetDParam(1, this->element - PFE_AI0 + 1);
SetDParamStr(2, GetAIName(this->element - PFE_AI0));
if (this->element == PFE_GAMESCRIPT) {
SetDParam(0, STR_FRAMETIME_CAPTION_GS_MAXOPCODE);
SetDParamStr(1, GetGSName());
SetDParam(2, Game::GetMaxOpCodes());
} else {
SetDParam(0, STR_FRAMETIME_CAPTION_AI_MAXOPCODE);
SetDParam(1, this->element - PFE_AI0 + 1);
SetDParamStr(2, GetAIName(this->element - PFE_AI0));
SetDParam(3, AI::GetMaxOpCodes((CompanyID)(this->element - PFE_AI0)));
}
}
break;
}
@@ -1064,12 +1176,22 @@ void ConPrintFramerate()
seprintf(ai_name_buf, lastof(ai_name_buf), "AI %d %s", e - PFE_AI0 + 1, GetAIName(e - PFE_AI0)),
name = ai_name_buf;
}
IConsolePrintF(TC_LIGHT_BLUE, "%s times: %.2fms %.2fms %.2fms",
name,
pf.GetAverageDurationMilliseconds(count1),
pf.GetAverageDurationMilliseconds(count2),
pf.GetAverageDurationMilliseconds(count3));
printed_anything = true;
if (e >= PFE_GAMESCRIPT && e <= PFE_AI14) {
IConsolePrintF(TC_LIGHT_BLUE, "%s times: %.2fms %.2fms %.2fms opcodes: %d",
name,
pf.GetAverageDurationMilliseconds(count1),
pf.GetAverageDurationMilliseconds(count2),
pf.GetAverageDurationMilliseconds(count3),
e == PFE_GAMESCRIPT ? Game::GetMaxOpCodes() : AI::GetMaxOpCodes((CompanyID)(e - PFE_AI0)));
printed_anything = true;
} else {
IConsolePrintF(TC_LIGHT_BLUE, "%s times: %.2fms %.2fms %.2fms",
name,
pf.GetAverageDurationMilliseconds(count1),
pf.GetAverageDurationMilliseconds(count2),
pf.GetAverageDurationMilliseconds(count3));
printed_anything = true;
}
}

if (!printed_anything) {
@@ -92,6 +92,16 @@ class Game {
*/
static void Load(int version);

/**
* Get the current maximum number of opcodes for a GameScript before it's suspended.
*/
static uint GetMaxOpCodes();

/**
* Set a maximum number of opcodes for a GameScript before it's suspended.
*/
static void SetMaxOpCodes(uint max_opcodes);

/** Wrapper function for GameScanner::GetConsoleList */
static char *GetConsoleList(char *p, const char *last, bool newest_only = false);
/** Wrapper function for GameScanner::GetConsoleLibraryList */
@@ -124,6 +134,7 @@ class Game {
static class GameScannerInfo *scanner_info; ///< Scanner for Game scripts.
static class GameScannerLibrary *scanner_library; ///< Scanner for GS Libraries.
static class GameInfo *info; ///< Current selected GameInfo.
static uint max_opcodes; ///< Maximum number of opcodes before the GameScript is suspended
};

#endif /* GAME_HPP */
@@ -27,6 +27,7 @@
/* static */ GameInstance *Game::instance = nullptr;
/* static */ GameScannerInfo *Game::scanner_info = nullptr;
/* static */ GameScannerLibrary *Game::scanner_library = nullptr;
/* static */ uint Game::max_opcodes = 0;

/* static */ void Game::GameLoop()
{
@@ -86,6 +87,7 @@
cur_company.Change(OWNER_DEITY);

Game::info = info;
Game::SetMaxOpCodes(_settings_game.script.script_max_opcode_till_suspend);
Game::instance = new GameInstance();
Game::instance->Initialize(info);

@@ -225,6 +227,16 @@
}
}

/* static */ uint Game::GetMaxOpCodes()
{
return Game::max_opcodes;
}

/* static */ void Game::SetMaxOpCodes(uint max_opcodes)
{
Game::max_opcodes = max_opcodes;
}

/* static */ char *Game::GetConsoleList(char *p, const char *last, bool newest_only)
{
return Game::scanner_info->GetConsoleList(p, last, newest_only);
@@ -236,7 +236,7 @@ void GameInstance::Died()
{
ScriptInstance::Died();

ShowAIDebugWindow(OWNER_DEITY);
ShowAIDebugWindowIfAIError(OWNER_DEITY);

const GameInfo *info = Game::GetInfo();
if (info != nullptr) {
@@ -3965,7 +3965,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Rekenaa
STR_AI_CONFIG_CAPTION :{WHITE}AI/Spel Konfigurasie
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spel Skrip wat in die volgende spel gelaai sal word
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Die AIs wat om die volgende spel gelaai sal word
STR_AI_CONFIG_HUMAN_PLAYER :Mens Speler
STR_AI_CONFIG_RANDOM_AI :Lukraak AI
STR_AI_CONFIG_NONE :(geen)

@@ -4007,7 +4006,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Speletjie Skrif
STR_AI_SETTINGS_CLOSE :{BLACK}Maak toe
STR_AI_SETTINGS_RESET :{BLACK}Herstel
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Aantal Dae om die AI te begin na die vorige een (omenby): {ORANGE}{STRING}


# Textfile window
@@ -3461,7 +3461,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW} شاش

# AI configuration window
STR_AI_CONFIG_CAPTION :{WHITE}إعدادات الذكاء الصناعي
STR_AI_CONFIG_HUMAN_PLAYER :لاعب انساني
STR_AI_CONFIG_RANDOM_AI :ذكاء صناعي عشوائي

STR_AI_CONFIG_MOVE_UP :{BLACK}انقل للاعلى
@@ -3840,7 +3840,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}IA/Joko
STR_AI_CONFIG_CAPTION :{WHITE}IA/Joko Script-aren Ezarpenak
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Hurrengo jokoan kargatuko den Joko Script-a
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Hurrengo jokoan kargatuko diren IA-k
STR_AI_CONFIG_HUMAN_PLAYER :Jokalaria
STR_AI_CONFIG_RANDOM_AI :Ausazko IA
STR_AI_CONFIG_NONE :(ezer ez)

@@ -3882,7 +3881,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Jokoaren Script
STR_AI_SETTINGS_CLOSE :{BLACK}Itxi
STR_AI_SETTINGS_RESET :{BLACK}Berrabiarazi
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :IA hau abiarazteko pasa beharko diren egunak (gutxi gora behera): {ORANGE}{STRING}


# Textfile window
@@ -4349,7 +4349,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Вак
STR_AI_CONFIG_CAPTION :{WHITE}Канфігурацыя ШІ / скрыпту
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Гульнёвы скрыпт, які будзе загружаны ў наступнай гульні
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Модулі ШІ, якія будуць загружаны ў наступнай гульні
STR_AI_CONFIG_HUMAN_PLAYER :Чалавек
STR_AI_CONFIG_RANDOM_AI :Выпадковы ШI
STR_AI_CONFIG_NONE :(няма)

@@ -4391,7 +4390,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Гульнёв
STR_AI_SETTINGS_CLOSE :{BLACK}Закрыць
STR_AI_SETTINGS_RESET :{BLACK}Ськід
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Колькасьць дзён да старту гэтага AI/ШI пасьля папярэдняга: {ORANGE}{STRING}


# Textfile window
@@ -4039,7 +4039,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Depura
STR_AI_CONFIG_CAPTION :{WHITE}Configuração da I.A./Script do jogo
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}O script do jogo que será carregado no próximo jogo
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}IAs que serão carregadas no próximo jogo
STR_AI_CONFIG_HUMAN_PLAYER :Jogador humano
STR_AI_CONFIG_RANDOM_AI :IA aleatória
STR_AI_CONFIG_NONE :{G=m}(nenhum)

@@ -4081,7 +4080,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script do jogo
STR_AI_SETTINGS_CLOSE :{BLACK}Fechar
STR_AI_SETTINGS_RESET :{BLACK}Resetar
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Número de dias para começar esta IA após a última: {ORANGE}{STRING}


# Textfile window
@@ -3942,7 +3942,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}ИИ Д
STR_AI_CONFIG_CAPTION :{WHITE}ИИ Настройки
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Иговия скрипт ще бъде зареден в следващата игра
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}ИИ-тата ще бъдат заредени в следващата игра
STR_AI_CONFIG_HUMAN_PLAYER :Човешки играч
STR_AI_CONFIG_RANDOM_AI :Случаен AI
STR_AI_CONFIG_NONE :(нищо)

@@ -3984,7 +3983,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Програм
STR_AI_SETTINGS_CLOSE :{BLACK}Затвори
STR_AI_SETTINGS_RESET :{BLACK}Рестартиране
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Броят дни докато този ИИ бъде стартиран след предишния (give or take): {ORANGE}{STRING}


# Textfile window
@@ -4084,7 +4084,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La fine
STR_AI_CONFIG_CAPTION :{WHITE}Configuració de la IA/script de partida
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Aquest és l'script que s'usarà a la propera partida.
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Aquesta llista conté les IA que es carregaran a la propera partida.
STR_AI_CONFIG_HUMAN_PLAYER :Jugador humà
STR_AI_CONFIG_RANDOM_AI :IA aleatòria
STR_AI_CONFIG_NONE :(cap)

@@ -4126,7 +4125,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :de l'script de
STR_AI_SETTINGS_CLOSE :{BLACK}Tanca
STR_AI_SETTINGS_RESET :{BLACK}Restableix
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Dies des de l'inici de la IA prèvia fins que s'inicia aquesta: {ORANGE}{STRING}


# Textfile window
@@ -4225,7 +4225,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Prozor
STR_AI_CONFIG_CAPTION :{WHITE}Konfiguracija UI-ja/Skripte igre
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Skripta Igre koja će biti učitana u sljedećoj igri
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}UI-jevi koji će biti učitani u sljedećoj igri
STR_AI_CONFIG_HUMAN_PLAYER :Ljudski igrač
STR_AI_CONFIG_RANDOM_AI :Nasumična UI
STR_AI_CONFIG_NONE :(nijedan)

@@ -4267,7 +4266,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Skripta Igre
STR_AI_SETTINGS_CLOSE :{BLACK}Zatvori
STR_AI_SETTINGS_RESET :{BLACK}Resetiraj
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Broj dana za start ovog UI-ja nakon prethodnog (otprilike): {ORANGE}{STRING}


# Textfile window
@@ -4227,7 +4227,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Okno na
STR_AI_CONFIG_CAPTION :{WHITE}Nastavení AI / hry
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Herní skripty, které budou načteny v příští hře
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI, které budou načteny v příští hře
STR_AI_CONFIG_HUMAN_PLAYER :Lidský hráč
STR_AI_CONFIG_RANDOM_AI :Náhodná AI
STR_AI_CONFIG_NONE :(žádný)

@@ -4269,7 +4268,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :herní skript
STR_AI_SETTINGS_CLOSE :{BLACK}Zavřít
STR_AI_SETTINGS_RESET :{BLACK}Obnovit nastavení
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Počet dní kdy se spustí tato AI po předchozí (plus/mínus): {ORANGE}{STRING}


# Textfile window
@@ -4088,7 +4088,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Compute
STR_AI_CONFIG_CAPTION :{WHITE}Konfiguration af computerspiller/spilscript
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spilscriptet der vil bliver indlæst i næste spil
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AIer der vil bliver loaded i næste spil
STR_AI_CONFIG_HUMAN_PLAYER :Menneskelig spiller
STR_AI_CONFIG_RANDOM_AI :Tilfældig computerspiller
STR_AI_CONFIG_NONE :(ingen)

@@ -4130,7 +4129,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spilscript
STR_AI_SETTINGS_CLOSE :{BLACK}Luk
STR_AI_SETTINGS_RESET :{BLACK}Nulstil
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Antal dage denne AI skal starte efter den forrige (plus/minus): {ORANGE}{STRING}


# Textfile window
@@ -4138,7 +4138,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI-/spe
STR_AI_CONFIG_CAPTION :{WHITE}AI-/spelscriptconfiguratie
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Het spelscript dat in het volgende spel geladen wordt
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}De AI's die in het volgende spel geladen worden
STR_AI_CONFIG_HUMAN_PLAYER :Menselijke speler
STR_AI_CONFIG_RANDOM_AI :Willekeurige AI
STR_AI_CONFIG_NONE :(geen)

@@ -4180,7 +4179,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spelscript
STR_AI_SETTINGS_CLOSE :{BLACK}Sluiten
STR_AI_SETTINGS_RESET :{BLACK}Terugstellen
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Aantal dagen dat deze AI start na de vorige (ongeveer): {ORANGE}{STRING}


# Textfile window
@@ -778,6 +778,7 @@ STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {C
STR_STATUSBAR_PAUSED :{YELLOW}* * PAUSED * *
STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE
STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * *
STR_STATUSBAR_SPECTATOR :{WHITE}- - Spectator - -

# News message history
STR_MESSAGE_HISTORY :{WHITE}Message History
@@ -1484,9 +1485,13 @@ STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Choose which se
STR_CONFIG_SETTING_AI_PROFILE_EASY :Easy
STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Medium
STR_CONFIG_SETTING_AI_PROFILE_HARD :Hard
STR_CONFIG_SETTING_AI_PROFILE_CUSTOM :Custom

STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Allow AIs in multiplayer: {STRING2}
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Allow AI computer players to participate in multiplayer games
STR_CONFIG_SETTING_AI_START_DELAY :Start delay between AIs (give or take): {STRING2}
STR_CONFIG_SETTING_AI_START_DELAY_HELPTEXT :Number of days to wait before starting an AI, or subsequent AI(s) after the previous one.{}If the number of days is different than zero, a random deviation of 60 days is added, and the actual value in-game will be 'number_of_days + random(-60 days, 60 days)', with a minimum of 1 day and a maximum of 3600 days.{}If the number of days is zero, the AI(s) will start immediately.{}The default value for this setting is based on the value selected for 'Default settings profile'.
STR_CONFIG_SETTING_AI_START_DELAY_VALUE :{COMMA}{NBSP}day{P 0 "" s}
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes before scripts are suspended: {STRING2}
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximum number of computation steps that a script can take in one turn
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Max memory usage per script: {STRING2}
@@ -1776,7 +1781,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Highscor
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Settings
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF Settings
STR_INTRO_ONLINE_CONTENT :{BLACK}Check Online Content
STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI/Game Script Settings
STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI/Game Script Configuration
STR_INTRO_QUIT :{BLACK}Exit

STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Start a new game. Ctrl+Click skips map configuration
@@ -1796,7 +1801,7 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Display
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Display settings
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Display NewGRF settings
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Check for new and updated content to download
STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Display AI/Game script settings
STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Display AI/Game script configuration
STR_INTRO_TOOLTIP_QUIT :{BLACK}Exit 'OpenTTD'

STR_INTRO_BASESET :{BLACK}The currently selected base graphics set is missing {NUM} sprite{P "" s}. Please check for updates for the baseset.
@@ -2745,6 +2750,7 @@ STR_FRAMERATE_SPEED_FACTOR :{BLACK}Current
STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}How fast the game is currently running, compared to the expected speed at normal simulation rate.
STR_FRAMERATE_CURRENT :{WHITE}Current
STR_FRAMERATE_AVERAGE :{WHITE}Average
STR_FRAMERATE_OPCODES :{WHITE}Max Ops
STR_FRAMERATE_MEMORYUSE :{WHITE}Memory
STR_FRAMERATE_DATA_POINTS :{BLACK}Data based on {COMMA} measurements
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
@@ -2753,6 +2759,7 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}
STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frames/s
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} frames/s
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s
STR_FRAMERATE_OPS :{LTBLUE}{COMMA} ops
STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES}
STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES}
STR_FRAMERATE_BYTES_BAD :{RED}{BYTES}
@@ -2772,7 +2779,7 @@ STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} World
STR_FRAMERATE_VIDEO :{BLACK}Video output:
STR_FRAMERATE_SOUND :{BLACK}Sound mixing:
STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI total:
STR_FRAMERATE_GAMESCRIPT :{BLACK} Game script:
STR_FRAMERATE_GAMESCRIPT :{BLACK} GS {RAW_STRING}
STR_FRAMERATE_AI :{BLACK} AI {NUM} {RAW_STRING}
############ End of leave-in-this-order
############ Leave those lines in this order!!
@@ -2792,6 +2799,8 @@ STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI scripts t
STR_FRAMETIME_CAPTION_GAMESCRIPT :Game script
STR_FRAMETIME_CAPTION_AI :AI {NUM} {RAW_STRING}
############ End of leave-in-this-order
STR_FRAMETIME_CAPTION_AI_MAXOPCODE :AI {NUM} {RAW_STRING} {COMMA} ops
STR_FRAMETIME_CAPTION_GS_MAXOPCODE :GS {RAW_STRING} {COMMA} ops


# Save/load game/scenario
@@ -4136,10 +4145,12 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Game

# AI configuration window
STR_AI_CONFIG_CAPTION :{WHITE}AI/Game Script Configuration
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}The Game Script that will be loaded in the next game
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}The AIs that will be loaded in the next game
STR_AI_CONFIG_HUMAN_PLAYER :Human player
STR_AI_CONFIG_RANDOM_AI :Random AI
STR_AI_CONFIG_CAPTION_INGAME :{WHITE}AI/Game Script Settings
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}The Game Script that is loaded or will be loaded in the next game
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}The AIs that are currently loaded or will be loaded next time they start on these Company IDs while in a game
STR_AI_CONFIG_START_DELAY :{LTBLUE}Start delay between AIs (give or take): {ORANGE}{STRING1}
STR_AI_CONFIG_START_DELAY_TOOLTIP :{BLACK}Number of days to wait before starting an AI, or subsequent AI(s) after the previous one.{}If the number of days is different than zero, a random deviation of 60 days is added, and the actual value in-game will be 'number_of_days + random(-60 days, 60 days)', with a minimum of 1 day and a maximum of 3600 days.{}If the number of days is zero, the AI(s) will start immediately.{}The default value for this setting is based on the value selected for 'Default settings profile'.
STR_AI_CONFIG_RANDOM_AI :(random)
STR_AI_CONFIG_NONE :(none)

STR_AI_CONFIG_MOVE_UP :{BLACK}Move Up
@@ -4156,7 +4167,14 @@ STR_AI_CONFIG_CHANGE_AI :AI
STR_AI_CONFIG_CHANGE_GAMESCRIPT :Game Script
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Load another script
STR_AI_CONFIG_CONFIGURE :{BLACK}Configure
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configure the parameters of the Script
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configure the parameters of the script
STR_AI_CONFIG_START :{BLACK}Start AI
STR_AI_CONFIG_START_TOOLTIP :{BLACK}Load the selected script, and start an AI Company in the selected Company ID
STR_AI_CONFIG_STOP :{BLACK}Stop AI
STR_AI_CONFIG_STOP_TOOLTIP :{BLACK}Kill the selected AI, and remove its Company

STR_ERROR_AI_CAN_T_START :{WHITE}Can't start AI...
STR_ERROR_AI_ALLOW_IN_MULTIPLAYER :Make sure to allow AI computer players to participate in multiplayer games first.

# Available AIs window
STR_AI_LIST_CAPTION :{WHITE}Available {STRING}
@@ -4174,13 +4192,12 @@ STR_AI_LIST_CANCEL :{BLACK}Cancel
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Don't change the script

# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters of {STRING1} {STRING1}
STR_AI_SETTINGS_CAPTION_AI :AI
STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script
STR_AI_SETTINGS_CLOSE :{BLACK}Close
STR_AI_SETTINGS_RESET :{BLACK}Reset
STR_AI_SETTINGS_SETTING :{RAW_STRING}: {ORANGE}{STRING1}
STR_AI_SETTINGS_START_DELAY :Number of days to start this AI after the previous one (give or take): {ORANGE}{STRING1}


# Textfile window
@@ -3915,7 +3915,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI / Ga
STR_AI_CONFIG_CAPTION :{WHITE}AI/Game Script Configuration
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}The Game Script that will be loaded in the next game
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}The AIs that will be loaded in the next game
STR_AI_CONFIG_HUMAN_PLAYER :Human player
STR_AI_CONFIG_RANDOM_AI :Random AI
STR_AI_CONFIG_NONE :(none)

@@ -3957,7 +3956,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script
STR_AI_SETTINGS_CLOSE :{BLACK}Close
STR_AI_SETTINGS_RESET :{BLACK}Reset
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Number of days to start this AI after the previous one (give or take): {ORANGE}{STRING}


# Textfile window
@@ -4129,7 +4129,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Game
STR_AI_CONFIG_CAPTION :{WHITE}AI/Game Script Configuration
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}The Game Script that will be loaded in the next game
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}The AIs that will be loaded in the next game
STR_AI_CONFIG_HUMAN_PLAYER :Human player
STR_AI_CONFIG_RANDOM_AI :Random AI
STR_AI_CONFIG_NONE :(none)

@@ -4171,7 +4170,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script
STR_AI_SETTINGS_CLOSE :{BLACK}Close
STR_AI_SETTINGS_RESET :{BLACK}Reset
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Number of days to start this AI after the previous one (give or take): {ORANGE}{STRING}


# Textfile window
@@ -3359,7 +3359,6 @@ STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vidu for

# AI configuration window
STR_AI_CONFIG_CAPTION :{WHITE}AI/Ludo Skripto Agordo
STR_AI_CONFIG_HUMAN_PLAYER :Homa ludanto
STR_AI_CONFIG_RANDOM_AI :Hazarda AI
STR_AI_CONFIG_NONE :(neniu)

@@ -4057,7 +4057,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tehism
STR_AI_CONFIG_CAPTION :{WHITE}Arvuti seadistus
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}GameScript-id mis laetakse järgmise mänguga
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Tehismõistused mis laetakse järgmise mänguga
STR_AI_CONFIG_HUMAN_PLAYER :Inimene
STR_AI_CONFIG_RANDOM_AI :Suvaline tehismõistus
STR_AI_CONFIG_NONE :(mitte ühtegi)

@@ -4099,7 +4098,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :GameScript
STR_AI_SETTINGS_CLOSE :{BLACK}Sulge
STR_AI_SETTINGS_RESET :{BLACK}Nulli
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Päevade arv eelmise tehismõistuse alustamisest pärast mida antud tehismõistus alustab (umbkaudne): {ORANGE}{STRING}


# Textfile window
@@ -3491,7 +3491,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Game
STR_AI_CONFIG_CAPTION :{WHITE}AI/Spæli script innstillingar
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spæli scripti sum verður heinta í næsta spæli
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI sum verða heintaði í næsta spæli
STR_AI_CONFIG_HUMAN_PLAYER :Menniskja spælari
STR_AI_CONFIG_RANDOM_AI :Tilvildarligt AI
STR_AI_CONFIG_NONE :(einki)

@@ -3533,7 +3532,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spæl Script
STR_AI_SETTINGS_CLOSE :{BLACK}Lat aftur
STR_AI_SETTINGS_RESET :{BLACK}Endurstilla
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Tali av døgum til hetta AI byrjar aftaná tað fyrra (umleið): {ORANGE}{STRING}


# Textfile window
@@ -4138,7 +4138,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tekoäl
STR_AI_CONFIG_CAPTION :{WHITE}Tekoälyn/peliskriptin määritteet
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Seuraavassa pelissä ladattava peliskripti
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Seuraavassa pelissä ladattavat tekoälyt
STR_AI_CONFIG_HUMAN_PLAYER :Ihmispelaaja
STR_AI_CONFIG_RANDOM_AI :Sattumanvarainen tekoäly
STR_AI_CONFIG_NONE :(ei mitään)

@@ -4180,7 +4179,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Peliskripti
STR_AI_SETTINGS_CLOSE :{BLACK}Sulje
STR_AI_SETTINGS_RESET :{BLACK}Palauta
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Päiviä edellisen tekoälyn aloittamisesta tämän tekoälyn aloittamiseen (arvio): {ORANGE}{STRING}


# Textfile window
@@ -4139,7 +4139,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La fen
STR_AI_CONFIG_CAPTION :{WHITE}Configuration d'IA et de scripts de jeu
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Le script de jeu qui sera chargé dans la prochaine partie
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Les IAs qui seront chargées dans la prochaine partie
STR_AI_CONFIG_HUMAN_PLAYER :Joueur humain
STR_AI_CONFIG_RANDOM_AI :IA aléatoire
STR_AI_CONFIG_NONE :(aucun)

@@ -4181,7 +4180,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de jeu
STR_AI_SETTINGS_CLOSE :{BLACK}Fermer
STR_AI_SETTINGS_RESET :{BLACK}Réinitialiser
STR_AI_SETTINGS_SETTING :{STRING}{NBSP}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Nombre de jours avant de démarrer cette IA après la précédente (approximativement){NBSP}: {ORANGE}{STRING}


# Textfile window
@@ -4259,7 +4259,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Chan ei
STR_AI_CONFIG_CAPTION :{WHITE}Rèiteachadh an IF/sgriobt geama
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}An sgriobt geama a thèid a luchdadh leis an ath-gheama
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Na IF a thèid a luchdadh leis an ath-gheama
STR_AI_CONFIG_HUMAN_PLAYER :Cluicheadair daonna
STR_AI_CONFIG_RANDOM_AI :IF air thuaiream
STR_AI_CONFIG_NONE :(gun IF)

@@ -4301,7 +4300,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Sgriobt geama
STR_AI_SETTINGS_CLOSE :{BLACK}Dùin
STR_AI_SETTINGS_RESET :{BLACK}Ath-shuidhich
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :An àireamh dhe làithean mus tèid an IF seo a thòiseachadh an dèidh an tè mu dheireadh (mu thimcheall): {ORANGE}{STRING}


# Textfile window
@@ -4139,7 +4139,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A fiest
STR_AI_CONFIG_CAPTION :{WHITE}Configuración IA / scripts do xogo
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}O script de xogo que se cargará na próxima partida
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}As IAs que serán cargadas na próxima partida
STR_AI_CONFIG_HUMAN_PLAYER :Xogador humano
STR_AI_CONFIG_RANDOM_AI :IA aleatoria
STR_AI_CONFIG_NONE :(ningunha)

@@ -4181,7 +4180,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script do xogo
STR_AI_SETTINGS_CLOSE :{BLACK}Pechar
STR_AI_SETTINGS_RESET :{BLACK}Restablecer
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Número de días para iniciar esta IA despois da anterior: {ORANGE}{STRING}


# Textfile window
@@ -4084,7 +4084,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Debugfe
STR_AI_CONFIG_CAPTION :{WHITE}KI / Skripte einstellen
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Das Skript, das im nächsten Spiel geladen wird
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Die KIs, die im nächsten Spiel geladen werden
STR_AI_CONFIG_HUMAN_PLAYER :menschlicher Spieler
STR_AI_CONFIG_RANDOM_AI :Zufällige KI
STR_AI_CONFIG_NONE :-

@@ -4126,7 +4125,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Skript
STR_AI_SETTINGS_CLOSE :{BLACK}Schließen
STR_AI_SETTINGS_RESET :{BLACK}Zurücksetzen
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Wartezeit in Tagen zwischen dem Starten dieser KI und dem der vorherigen : {ORANGE}{STRING}


# Textfile window
@@ -4210,7 +4210,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Το π
STR_AI_CONFIG_CAPTION :{WHITE}Ρύθμιση ΑΙ και Δέσμης Ενεργειών
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Η Δέσμη Ενεργειών παιχνιδιού που θα φορτωθεί στο επόμενο παιχνίδι
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Οι AIs που θα φορτωθούν στο επόμενο παιχνίδι
STR_AI_CONFIG_HUMAN_PLAYER :Ανθρώπινος παίκτης
STR_AI_CONFIG_RANDOM_AI :Τυχαία AI
STR_AI_CONFIG_NONE :{G=f}(καμία)

@@ -4252,7 +4251,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Δέσμη Εν
STR_AI_SETTINGS_CLOSE :{BLACK}Κλείσιμο
STR_AI_SETTINGS_RESET :{BLACK}Επαναφορά
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Αριθμός ημερών για την εκκίνηση της επόμενης AI μετά από τη προηγούμενη (περίπου): {ORANGE}{STRING}


# Textfile window
@@ -4038,7 +4038,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}חלו
STR_AI_CONFIG_CAPTION :{WHITE}הגדרות משחק/בינה מלאכותית
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}סקריפט המשחק אשר יטען במשחק הבא
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}שחקני המחשב אשר יטענו במשחק הבא
STR_AI_CONFIG_HUMAN_PLAYER :שחקן אנושי
STR_AI_CONFIG_RANDOM_AI :בינה מלאכותית אקראית
STR_AI_CONFIG_NONE :(ללא)

@@ -4080,7 +4079,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :סקריפט מ
STR_AI_SETTINGS_CLOSE :{BLACK}סגור
STR_AI_SETTINGS_RESET :{BLACK}אתחל
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :מספר הימים להתחלת שחקן מחשב זה אחרי הקודם (פחות או יותר): {ORANGE}{STRING}


# Textfile window
@@ -4196,7 +4196,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Az MI /
STR_AI_CONFIG_CAPTION :{WHITE}MI / Játékszkript beállítások
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}A következő játékban betöltődő játékszkript
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}A következő játékban betöltődő MI-k
STR_AI_CONFIG_HUMAN_PLAYER :Játékos
STR_AI_CONFIG_RANDOM_AI :Véletlenszerűen választott MI
STR_AI_CONFIG_NONE :(nincs)

@@ -4238,7 +4237,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Játékszkript
STR_AI_SETTINGS_CLOSE :{BLACK}Bezárás
STR_AI_SETTINGS_RESET :{BLACK}Visszaállítás
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Az előző MI indításától eltelt napok száma ezen MI indításáig (megközelítőleg): {ORANGE}{STRING}


# Textfile window
@@ -3732,7 +3732,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Aflúsu
STR_AI_CONFIG_CAPTION :{WHITE}Stilling gervigreindar/forskriftar
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Forskriftin sem verður hlaðin í næsta leik
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Gervigreindin sem verður hlaðin í næsta leik
STR_AI_CONFIG_HUMAN_PLAYER :Mennskur leikmaður
STR_AI_CONFIG_RANDOM_AI :Gervigreind af handahófi
STR_AI_CONFIG_NONE :(engin)

@@ -3774,7 +3773,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Leikja forskrif
STR_AI_SETTINGS_CLOSE :{BLACK}Loka
STR_AI_SETTINGS_RESET :{BLACK}Frumstilla
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Hversu mörgum dögum eftir síðustu gervigreind á að hlaða þessari (sirka): {ORANGE}{STRING}


# Textfile window
@@ -4031,7 +4031,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Jendela
STR_AI_CONFIG_CAPTION :{WHITE}Konfigurasi AI
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Skrip Permainan yang akan di jalankan di permainan berikutnya
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI yg akan dijalankan pada permainan berikutnya
STR_AI_CONFIG_HUMAN_PLAYER :Pemain Manusia
STR_AI_CONFIG_RANDOM_AI :AI Acak
STR_AI_CONFIG_NONE :(tidak ada)

@@ -4073,7 +4072,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Skrip Permainan
STR_AI_SETTINGS_CLOSE :{BLACK}Tutup
STR_AI_SETTINGS_RESET :{BLACK}Reset
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Jalankan AI setelah berapa hari : {ORANGE}{STRING}


# Textfile window
@@ -3964,7 +3964,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Níl an
STR_AI_CONFIG_CAPTION :{WHITE}Cumrú AI
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}An Script Cluiche a lódálfar sa chéad chluiche eile
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Na AInna a lódálfar sa chéad chluiche eile
STR_AI_CONFIG_HUMAN_PLAYER :Imreoir Daonna
STR_AI_CONFIG_RANDOM_AI :AI Randamach
STR_AI_CONFIG_NONE :(ceann ar bith)

@@ -4006,7 +4005,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script an Chlui
STR_AI_SETTINGS_CLOSE :{BLACK}Dún
STR_AI_SETTINGS_RESET :{BLACK}Athshocraigh
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Líon na laethanta a thógfaidh sé chun an AI seo a thosú tar éis an ceann roimhe (a bheag nó a mhór): {ORANGE}{STRING}


# Textfile window
@@ -4161,7 +4161,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La fine
STR_AI_CONFIG_CAPTION :{WHITE}Configurazione IA e Script
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Lista degli Script che saranno caricati nella prossima partita
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Lista delle IA che saranno caricate nella prossima partita
STR_AI_CONFIG_HUMAN_PLAYER :Giocatore umano
STR_AI_CONFIG_RANDOM_AI :IA casuale
STR_AI_CONFIG_NONE :(nessuno)

@@ -4203,7 +4202,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script
STR_AI_SETTINGS_CLOSE :{BLACK}Chiudi
STR_AI_SETTINGS_RESET :{BLACK}Reimposta
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Giorni da attendere per l'avvio di questa IA dopo la precedente (approssimativo): {ORANGE}{STRING}


# Textfile window
@@ -3967,7 +3967,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/ゲ
STR_AI_CONFIG_CAPTION :{WHITE}AIの設定
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}このゲームスクリプトは次のゲーム開始時からロードされます
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}}このAIは次のゲーム開始時からロードされます
STR_AI_CONFIG_HUMAN_PLAYER :人間のプレーヤー
STR_AI_CONFIG_RANDOM_AI :ランダムなAI
STR_AI_CONFIG_NONE :(なし)

@@ -4009,7 +4008,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :ゲームスク
STR_AI_SETTINGS_CLOSE :{BLACK}閉じる
STR_AI_SETTINGS_RESET :{BLACK}リセット
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :AI企業の設立間隔(倒産/買収後): {ORANGE}{STRING}


# Textfile window
@@ -4139,7 +4139,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}인공
STR_AI_CONFIG_CAPTION :{WHITE}인공지능 / 게임 스크립트 설정
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}다음에 게임을 시작할 때 이 게임 스크립트를 불러올 것입니다
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}다음에 게임을 시작할 때 이 인공지능을 불러올 것입니다
STR_AI_CONFIG_HUMAN_PLAYER :사용자 플레이어
STR_AI_CONFIG_RANDOM_AI :무작위 인공지능
STR_AI_CONFIG_NONE :(없음)

@@ -4181,7 +4180,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :게임 스크
STR_AI_SETTINGS_CLOSE :{BLACK}닫기
STR_AI_SETTINGS_RESET :{BLACK}초기화
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :이전 인공지능 이후 이 인공지능이 나타나기 위한 날짜수: {ORANGE}약 {STRING}일


# Textfile window
@@ -4259,7 +4259,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Fenestr
STR_AI_CONFIG_CAPTION :{WHITE}Configuratio IA/Ludi Scriptum
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Ludi Scriptum quod imponet ludo proximo
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}IA quae imponet ludo proximo
STR_AI_CONFIG_HUMAN_PLAYER :Lusor humanus
STR_AI_CONFIG_RANDOM_AI :IA Fortuita
STR_AI_CONFIG_NONE :(nullum)

@@ -4301,7 +4300,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Ludi Scripti
STR_AI_SETTINGS_CLOSE :{BLACK}Claudere
STR_AI_SETTINGS_RESET :{BLACK}Revertere
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Quot dies post IA priorem haec IA incipiet (plus minusve): {ORANGE}{STRING}


# Textfile window
@@ -3901,7 +3901,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}MI/spē
STR_AI_CONFIG_CAPTION :{WHITE}MI/spēles skriptu konfigurācija
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spēles skripts, kas tiks ielādēts nākamajā spēlē
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}MI, kas tiks ielādēts nākamajā spēlē
STR_AI_CONFIG_HUMAN_PLAYER :Spēlētājs (cilvēks)
STR_AI_CONFIG_RANDOM_AI :Nejaušs MI
STR_AI_CONFIG_NONE :(nav)

@@ -3943,7 +3942,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spēles skripts
STR_AI_SETTINGS_CLOSE :{BLACK}Aizvērt
STR_AI_SETTINGS_RESET :{BLACK}Atiestatīt
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Aptuvenais dienu skaits, līdz palaist šo MI pēc iepriekšējā: {ORANGE}{STRING}


# Textfile window
@@ -4239,7 +4239,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}DI / Ga
STR_AI_CONFIG_CAPTION :{WHITE}DI / Žaidimo Nustatymai
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Žaidimo skriptas bus įkeltas sekančiame žaidime
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}DI'ai bus įkelti sekančiame žaidime
STR_AI_CONFIG_HUMAN_PLAYER :Žaidėjas Žmogus
STR_AI_CONFIG_RANDOM_AI :Atsitiktinis DI
STR_AI_CONFIG_NONE :(tusčia)

@@ -4281,7 +4280,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Žaidimo skript
STR_AI_SETTINGS_CLOSE :{BLACK}Uždaryti
STR_AI_SETTINGS_RESET :{BLACK}Atstatyti
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Dienų skaičius po kurio šitas DI bus paleistas po paskutiniojo (maždaug): {ORANGE}{STRING}


# Textfile window
@@ -4073,7 +4073,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}KI / Sp
STR_AI_CONFIG_CAPTION :{WHITE}KI /Spill-Script Konfiguratioun
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}D'Spill-Script dat am nächsten Spill geluede gëtt
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}D'KIën déi am nächsten Spill geluede ginn
STR_AI_CONFIG_HUMAN_PLAYER :Mënschleche Spiller
STR_AI_CONFIG_RANDOM_AI :Zoufälleg KI
STR_AI_CONFIG_NONE :(keng)

@@ -4115,7 +4114,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spill-Script
STR_AI_SETTINGS_CLOSE :{BLACK}Zoumaachen
STR_AI_SETTINGS_RESET :{BLACK}Reset
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Unzuel un Deeg wou des KI gestart gëtt no der leschter: {ORANGE}{STRING}


# Textfile window
@@ -3649,7 +3649,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tetingk
STR_AI_CONFIG_CAPTION :{WHITE}Konfigurasi Kepintaran Tiruan / Permainan
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}SkripPermainan yang akan dimuatkan pada permainan seterusnya
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Kepintaran Tiruan yang akan dimuatkan pada permainan seterusnya
STR_AI_CONFIG_HUMAN_PLAYER :Pemain manusia
STR_AI_CONFIG_RANDOM_AI :Kepintaran Tiruan rawak
STR_AI_CONFIG_NONE :(tiada)

@@ -3691,7 +3690,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :SkripPermainan
STR_AI_SETTINGS_CLOSE :{BLACK}Tutup
STR_AI_SETTINGS_RESET :{BLACK}Semula
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Bilangan hari Kepintaran Tiruan dimulakan selepas yang terdahulu (lebih kurang): {ORANGE}{STRING}


# Textfile window
@@ -4133,7 +4133,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Spil
STR_AI_CONFIG_CAPTION :{WHITE}AI/Spillskript-konfigurasjon
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spillskriptet som vil bli lastet i neste spill
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI-ene som vil bli lastet i neste spill
STR_AI_CONFIG_HUMAN_PLAYER :Menneskelig spiller
STR_AI_CONFIG_RANDOM_AI :Tilfeldig AI
STR_AI_CONFIG_NONE :(ingen)

@@ -4176,7 +4175,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spillskript
STR_AI_SETTINGS_CLOSE :{BLACK}Lukk
STR_AI_SETTINGS_RESET :{BLACK}Tilbakestill
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Antall dager denne AIen skal starte etter den forrige (ca): {ORANGE}{STRING}


# Textfile window
@@ -3880,7 +3880,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI- / S
STR_AI_CONFIG_CAPTION :{WHITE}AI- / Spelkonfigurasjonar
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spelscriptet som blir lasta i neste spel
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AIane som blir lasta i neste spel
STR_AI_CONFIG_HUMAN_PLAYER :Menneskeleg spelar
STR_AI_CONFIG_RANDOM_AI :Tilfeldig AI
STR_AI_CONFIG_NONE :(ingen)

@@ -3922,7 +3921,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spelscript
STR_AI_SETTINGS_CLOSE :{BLACK}Lukk
STR_AI_SETTINGS_RESET :{BLACK}Tilbakestill
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Antall dagar denne AIen skal starte etter den førre (ca): {ORANGE}{STRING}


# Textfile window
@@ -4524,7 +4524,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Okno de
STR_AI_CONFIG_CAPTION :{WHITE}Konfiguracja SI / Game Script
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Game Script, który zostanie załadowany dla następnej gry
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}SI, które zostaną załadowane podczas kolejnej gry
STR_AI_CONFIG_HUMAN_PLAYER :Ludzki gracz
STR_AI_CONFIG_RANDOM_AI :Losowe SI
STR_AI_CONFIG_NONE :(brak)

@@ -4566,7 +4565,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script
STR_AI_SETTINGS_CLOSE :{BLACK}Zamknij
STR_AI_SETTINGS_RESET :{BLACK}Resetuj
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Liczba dni, które odczekuje SI przed aktywacją po uruchomieniu poprzedniego (zwiększ lub zmniejsz): {ORANGE}{STRING}


# Textfile window
@@ -4124,7 +4124,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janel
STR_AI_CONFIG_CAPTION :{WHITE}Configuração IA/Script de jogo
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}O Script de jogo que será carregado no próximo jogo
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}As IAs que serão carregadas no próximo jogo
STR_AI_CONFIG_HUMAN_PLAYER :Jogador humano
STR_AI_CONFIG_RANDOM_AI :IA aleatória
STR_AI_CONFIG_NONE :(nenhum)

@@ -4166,7 +4165,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de jogo
STR_AI_SETTINGS_CLOSE :{BLACK}Fechar
STR_AI_SETTINGS_RESET :{BLACK}Repor
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Número de dias para iniciar esta IA depois da anterior (aproximadamente): {ORANGE}{STRING}


# Textfile window
@@ -3950,7 +3950,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Fereast
STR_AI_CONFIG_CAPTION :{WHITE}Configurație Inteligentă Artificială / Scripturi Joc
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Script Joc încărcat în jocul următor
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Modulul de IA care va fi încărcat în jocul următor
STR_AI_CONFIG_HUMAN_PLAYER :Jucator uman
STR_AI_CONFIG_RANDOM_AI :IA aleator
STR_AI_CONFIG_NONE :(nici unul)

@@ -3992,7 +3991,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script Joc
STR_AI_SETTINGS_CLOSE :{BLACK}Închide
STR_AI_SETTINGS_RESET :{BLACK}Resetează
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Perioada (în zile) după care această librărie IA va fi activată, după cea anterioară (valoare aproximativă): {ORANGE}{STRING}


# Textfile window
@@ -4330,7 +4330,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Окн
STR_AI_CONFIG_CAPTION :{WHITE}Конфигурация ИИ / скрипта
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Игровой скрипт, который будет загружен в следующей игре
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Модули ИИ, которые будут загружены в следующей игре
STR_AI_CONFIG_HUMAN_PLAYER :Человек
STR_AI_CONFIG_RANDOM_AI :Случайный ИИ
STR_AI_CONFIG_NONE :(нет)

@@ -4372,7 +4371,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Игровой
STR_AI_SETTINGS_CLOSE :{BLACK}Закрыть
STR_AI_SETTINGS_RESET :{BLACK}Сброс
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Запускать этот ИИ через {ORANGE}{STRING} д{P 0:1 ень ня ней} после предыдущего


# Textfile window
@@ -4206,7 +4206,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Prozor
STR_AI_CONFIG_CAPTION :{WHITE}Podešavanja VI / Skripte Partije
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Skripta parije koja će biti pokrenuta u sledećoj partiji
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Veštačke inteligencije koje će biti pokrenute u sledećoj partiji
STR_AI_CONFIG_HUMAN_PLAYER :Ljudsko biće
STR_AI_CONFIG_RANDOM_AI :Proizvoljna VI
STR_AI_CONFIG_NONE :(nijedna)

@@ -4248,7 +4247,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Skripta Partije
STR_AI_SETTINGS_CLOSE :{BLACK}Zatvori
STR_AI_SETTINGS_RESET :{BLACK}Poništi
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Broj dana za pokretanje ove VI posle prethodne (otprilike): {ORANGE}{STRING}


# Textfile window
@@ -4079,7 +4079,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI调
STR_AI_CONFIG_CAPTION :{WHITE}AI 设置
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}下局游戏将启用这些脚本
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}下局游戏将启用这些AI
STR_AI_CONFIG_HUMAN_PLAYER :玩家
STR_AI_CONFIG_RANDOM_AI :随机 AI
STR_AI_CONFIG_NONE :(无)

@@ -4121,7 +4120,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :游戏脚本
STR_AI_SETTINGS_CLOSE :{BLACK}关闭
STR_AI_SETTINGS_RESET :{BLACK}重设
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :当前AI在前一个AI运行 {ORANGE}{STRING}天之后开始运行


# Textfile window
@@ -4032,7 +4032,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Umelá
STR_AI_CONFIG_CAPTION :{WHITE}Umelá inteligencia / Konfigurácia hry
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Skript, ktorý bude načítaný v ďalšej hre
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AIs budú nastavené v ďalšej hre.
STR_AI_CONFIG_HUMAN_PLAYER :Človek
STR_AI_CONFIG_RANDOM_AI :Náhodná AI
STR_AI_CONFIG_NONE :(none)

@@ -4074,7 +4073,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Skript
STR_AI_SETTINGS_CLOSE :{BLACK}Zavrieť
STR_AI_SETTINGS_RESET :{BLACK}Resetovať
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Koľko dní prejde od spustenia predchádzajúcej umelej inteligencie k naštartovaniu novej: {ORANGE}{STRING}


# Textfile window
@@ -4122,7 +4122,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Okno ra
STR_AI_CONFIG_CAPTION :{WHITE}Nastavitve UI / skript igre
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Skript igre, ki bo naložen v naslednji igri
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}UI, ki bodo naložene v naslednji igri
STR_AI_CONFIG_HUMAN_PLAYER :Igralec
STR_AI_CONFIG_RANDOM_AI :Naključni UI
STR_AI_CONFIG_NONE :(brez)

@@ -4164,7 +4163,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Skripta igre
STR_AI_SETTINGS_CLOSE :{BLACK}Zapri
STR_AI_SETTINGS_RESET :{BLACK}Resetiraj
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Število dni zamika med zagonom sledeče po predhodni UI: {ORANGE}{STRING}


# Textfile window
@@ -4131,7 +4131,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La vent
STR_AI_CONFIG_CAPTION :{WHITE}Configuración de Scripts de Juego / IA
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Script de Juego que será cargado en la próxima partida
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}IAs que serán cargadas en la próxima partida
STR_AI_CONFIG_HUMAN_PLAYER :Jugador Humano
STR_AI_CONFIG_RANDOM_AI :IA aleatoria
STR_AI_CONFIG_NONE :(ninguna)

@@ -4173,7 +4172,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de Juego
STR_AI_SETTINGS_CLOSE :{BLACK}Cerrar
STR_AI_SETTINGS_RESET :{BLACK}Reiniciar
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Número de días a esperar antes de comenzar esta IA desde el momento en el que empezó la anterior: {ORANGE}{STRING}


# Textfile window
@@ -4139,7 +4139,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La vent
STR_AI_CONFIG_CAPTION :{WHITE}Configuración de scripts
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Script de juego que será cargado en la próxima partida
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Scripts de IA que serán cargados la próxima partida
STR_AI_CONFIG_HUMAN_PLAYER :Jugador humano
STR_AI_CONFIG_RANDOM_AI :IA aleatoria
STR_AI_CONFIG_NONE :(ninguno)

@@ -4181,7 +4180,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de juego
STR_AI_SETTINGS_CLOSE :{BLACK}Cerrar
STR_AI_SETTINGS_RESET :{BLACK}Reiniciar
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Número de días a esperar antes de comenzar esta IA desde el momento en el que empezó la anterior: {ORANGE}{STRING}


# Textfile window
@@ -4129,7 +4129,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Felsök
STR_AI_CONFIG_CAPTION :{WHITE}Konfiguration av datorspelare/spelskript
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Spelskriptet som kommer att läsas in i nästa spel
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Datorspelare som kommer att läsas in i nästa spel
STR_AI_CONFIG_HUMAN_PLAYER :Mänsklig spelare
STR_AI_CONFIG_RANDOM_AI :Slumpa datorspelare
STR_AI_CONFIG_NONE :(inget)

@@ -4171,7 +4170,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spelskriptets
STR_AI_SETTINGS_CLOSE :{BLACK}Stäng
STR_AI_SETTINGS_RESET :{BLACK}Återställ
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Ungefärligt antal dagar som denna datorspelare startar efter föregående datorspelare: {ORANGE}{STRING}


# Textfile window
@@ -3594,7 +3594,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/ஆ
STR_AI_CONFIG_CAPTION :{WHITE}AI/வரிவடிவம் ஏற்றபடி அமை
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}வரிவடிவம் அடுத்த ஆட்டங்களிலிருந்து பதிவேற்றப்படும்
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}அடுத்த ஆட்டங்களில் பதிவேற்றப்படும் AI-கள்
STR_AI_CONFIG_HUMAN_PLAYER :மனித வீரர்
STR_AI_CONFIG_RANDOM_AI :ஏதொவொரு AI
STR_AI_CONFIG_NONE :(none)

@@ -3636,7 +3635,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :விளைய
STR_AI_SETTINGS_CLOSE :{BLACK}மூடு
STR_AI_SETTINGS_RESET :{BLACK}முன்னிருந்தமாதிரி மாற்று
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :இந்த AI-இனை தொடங்குவதற்கான நாட்கள், முந்தின AI-இற்கு பிறகு: {ORANGE}{STRING}


# Textfile window
@@ -3879,7 +3879,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Game
STR_AI_CONFIG_CAPTION :{WHITE}ปรับแต่ง AI/Game Script
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Game Script จะเปิดใช้งานในเกมถัดไป
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI จะทำการเปิดใช้งานในเกมถัดไป
STR_AI_CONFIG_HUMAN_PLAYER :ผู้เล่น
STR_AI_CONFIG_RANDOM_AI :คอมพิวเตอร์
STR_AI_CONFIG_NONE :(ไม่มี)

@@ -3921,7 +3920,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script
STR_AI_SETTINGS_CLOSE :{BLACK}ปิด
STR_AI_SETTINGS_RESET :{BLACK}เริ่มใหม่
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :จำนวนที่จะให้เริ่มต้น AI นี้หลังจากที่มีการเริ่มต้น AI ก่อนหน้านี้ไป: {ORANGE}{STRING}


# Textfile window
@@ -3965,7 +3965,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/只
STR_AI_CONFIG_CAPTION :{WHITE}AI /遊戲腳本的組態
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}將於下一次遊戲中載入的腳本
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}下局開始時將啟用AI
STR_AI_CONFIG_HUMAN_PLAYER :人類玩家
STR_AI_CONFIG_RANDOM_AI :隨機 AI
STR_AI_CONFIG_NONE :(無)

@@ -4007,7 +4006,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :遊戲腳本
STR_AI_SETTINGS_CLOSE :{BLACK}關閉
STR_AI_SETTINGS_RESET :{BLACK}重設
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :此 AI 與上一個 AI 的啟動時間相隔天數 (近似值): {ORANGE}{STRING}


# Textfile window
@@ -4073,7 +4073,6 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}YZ Hata
STR_AI_CONFIG_CAPTION :{WHITE}YZ Yapılandırması
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Bir sonraki oyunda yüklenecek Oyun Betiği
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Bir sonraki oyunda yüklenecek YZ'ler
STR_AI_CONFIG_HUMAN_PLAYER :İnsan oyuncu
STR_AI_CONFIG_RANDOM_AI :Rastgele YZ
STR_AI_CONFIG_NONE :(hiçbiri)

@@ -4115,7 +4114,6 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Oyun Betiği
STR_AI_SETTINGS_CLOSE :{BLACK}Kapat
STR_AI_SETTINGS_RESET :{BLACK}Yeniden başlat
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
STR_AI_SETTINGS_START_DELAY :Bu YZ bir öncekinden kaç gün sonra başlayacak (yaklaşık): {ORANGE}{STRING}


# Textfile window