Merge branch 'master' into jgrpp
# Conflicts: # src/base_media_func.h # src/cargopacket.h # src/gfxinit.cpp # src/industry_cmd.cpp # src/window_gui.h
This commit is contained in:
2
src/3rdparty/squirrel/include/sqstdstring.h
vendored
2
src/3rdparty/squirrel/include/sqstdstring.h
vendored
@@ -18,8 +18,6 @@ SQBool sqstd_rex_searchrange(SQRex* exp,const SQChar* text_begin,const SQChar* t
|
|||||||
SQInteger sqstd_rex_getsubexpcount(SQRex* exp);
|
SQInteger sqstd_rex_getsubexpcount(SQRex* exp);
|
||||||
SQBool sqstd_rex_getsubexp(SQRex* exp, SQInteger n, SQRexMatch *subexp);
|
SQBool sqstd_rex_getsubexp(SQRex* exp, SQInteger n, SQRexMatch *subexp);
|
||||||
|
|
||||||
SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen,SQChar **output);
|
|
||||||
|
|
||||||
SQRESULT sqstd_register_stringlib(HSQUIRRELVM v);
|
SQRESULT sqstd_register_stringlib(HSQUIRRELVM v);
|
||||||
|
|
||||||
#endif /*_SQSTD_STRING_H_*/
|
#endif /*_SQSTD_STRING_H_*/
|
||||||
|
95
src/3rdparty/squirrel/sqstdlib/sqstdstring.cpp
vendored
95
src/3rdparty/squirrel/sqstdlib/sqstdstring.cpp
vendored
@@ -53,101 +53,6 @@ static SQInteger validate_format(HSQUIRRELVM v, SQChar *fmt, const SQChar *src,
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Little hack to remove the "format not a string literal, argument types not checked" warning.
|
|
||||||
* This check has been added to OpenTTD to make sure that nobody passes wrong string literals,
|
|
||||||
* but three lines in Squirrel have a little problem with those. Therefor we use this hack
|
|
||||||
* which basically uses vsnprintf instead of sprintf as vsnprintf is not testing for the right
|
|
||||||
* string literal at compile time.
|
|
||||||
*/
|
|
||||||
static void _append_string(SQInteger &i, SQChar *dest, SQInteger allocated, const SQChar *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list va;
|
|
||||||
va_start(va, fmt);
|
|
||||||
i += vsnprintf(&dest[i],allocated-i,fmt,va);
|
|
||||||
va_end(va);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen,SQChar **output)
|
|
||||||
{
|
|
||||||
const SQChar *format;
|
|
||||||
SQChar *dest;
|
|
||||||
SQChar fmt[MAX_FORMAT_LEN];
|
|
||||||
sq_getstring(v,nformatstringidx,&format);
|
|
||||||
SQInteger allocated = (sq_getsize(v,nformatstringidx)+2)*sizeof(SQChar);
|
|
||||||
dest = sq_getscratchpad(v,allocated);
|
|
||||||
SQInteger n = 0,i = 0, nparam = nformatstringidx+1, w = 0;
|
|
||||||
while(format[n] != '\0') {
|
|
||||||
if(format[n] != '%') {
|
|
||||||
assert(i < allocated);
|
|
||||||
dest[i++] = format[n];
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
else if(format[n+1] == '%') { //handles %%
|
|
||||||
dest[i++] = '%';
|
|
||||||
n += 2;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
n++;
|
|
||||||
if( nparam > sq_gettop(v) )
|
|
||||||
return sq_throwerror(v,"not enough paramters for the given format string");
|
|
||||||
n = validate_format(v,fmt,format,n,w);
|
|
||||||
if(n < 0) return -1;
|
|
||||||
SQInteger addlen = 0;
|
|
||||||
SQInteger valtype = 0;
|
|
||||||
const SQChar *ts;
|
|
||||||
SQInteger ti;
|
|
||||||
SQFloat tf;
|
|
||||||
switch(format[n]) {
|
|
||||||
case 's':
|
|
||||||
if(SQ_FAILED(sq_getstring(v,nparam,&ts)))
|
|
||||||
return sq_throwerror(v,"string expected for the specified format");
|
|
||||||
addlen = (sq_getsize(v,nparam)*sizeof(SQChar))+((w+1)*sizeof(SQChar));
|
|
||||||
valtype = 's';
|
|
||||||
break;
|
|
||||||
case 'i': case 'd': case 'c':case 'o': case 'u': case 'x': case 'X':
|
|
||||||
if(SQ_FAILED(sq_getinteger(v,nparam,&ti)))
|
|
||||||
return sq_throwerror(v,"integer expected for the specified format");
|
|
||||||
addlen = (ADDITIONAL_FORMAT_SPACE)+((w+1)*sizeof(SQChar));
|
|
||||||
valtype = 'i';
|
|
||||||
break;
|
|
||||||
case 'f': case 'g': case 'G': case 'e': case 'E':
|
|
||||||
if(SQ_FAILED(sq_getfloat(v,nparam,&tf)))
|
|
||||||
return sq_throwerror(v,"float expected for the specified format");
|
|
||||||
addlen = (ADDITIONAL_FORMAT_SPACE)+((w+1)*sizeof(SQChar));
|
|
||||||
valtype = 'f';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return sq_throwerror(v,"invalid format");
|
|
||||||
}
|
|
||||||
n++;
|
|
||||||
allocated += addlen + sizeof(SQChar);
|
|
||||||
dest = sq_getscratchpad(v,allocated);
|
|
||||||
switch(valtype) {
|
|
||||||
case 's': _append_string(i,dest,allocated,fmt,ts); break;
|
|
||||||
case 'i': _append_string(i,dest,allocated,fmt,ti); break;
|
|
||||||
case 'f': _append_string(i,dest,allocated,fmt,tf); break;
|
|
||||||
};
|
|
||||||
nparam ++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*outlen = i;
|
|
||||||
dest[i] = '\0';
|
|
||||||
*output = dest;
|
|
||||||
return SQ_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static SQInteger _string_format(HSQUIRRELVM v)
|
|
||||||
{
|
|
||||||
SQChar *dest = NULL;
|
|
||||||
SQInteger length = 0;
|
|
||||||
if(SQ_FAILED(sqstd_format(v,2,&length,&dest)))
|
|
||||||
return -1;
|
|
||||||
sq_pushstring(v,dest,length);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __strip_l(const SQChar *str,const SQChar **start)
|
static void __strip_l(const SQChar *str,const SQChar **start)
|
||||||
{
|
{
|
||||||
const SQChar *t = str;
|
const SQChar *t = str;
|
||||||
|
@@ -146,7 +146,7 @@ class ReplaceVehicleWindow : public Window {
|
|||||||
GUIEngineList list;
|
GUIEngineList list;
|
||||||
|
|
||||||
for (const Engine *e : Engine::IterateType(type)) {
|
for (const Engine *e : Engine::IterateType(type)) {
|
||||||
if (!draw_left && !this->show_hidden_engines && e->IsHidden(_local_company)) continue;
|
if (!draw_left && !this->show_hidden_engines && e->IsVariantHidden(_local_company)) continue;
|
||||||
EngineID eid = e->index;
|
EngineID eid = e->index;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case VEH_TRAIN:
|
case VEH_TRAIN:
|
||||||
|
@@ -31,9 +31,9 @@ struct MD5File {
|
|||||||
CR_NO_FILE, ///< The file did not exist
|
CR_NO_FILE, ///< The file did not exist
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *filename; ///< filename
|
std::string filename; ///< filename
|
||||||
uint8 hash[16]; ///< md5 sum of the file
|
uint8 hash[16]; ///< md5 sum of the file
|
||||||
const char *missing_warning; ///< warning when this file is missing
|
std::string missing_warning; ///< warning when this file is missing
|
||||||
ChecksumResult check_result; ///< cached result of md5 check
|
ChecksumResult check_result; ///< cached result of md5 check
|
||||||
|
|
||||||
ChecksumResult CheckMD5(Subdirectory subdir, size_t max_size) const;
|
ChecksumResult CheckMD5(Subdirectory subdir, size_t max_size) const;
|
||||||
@@ -73,11 +73,6 @@ struct BaseSet {
|
|||||||
/** Free everything we allocated */
|
/** Free everything we allocated */
|
||||||
~BaseSet()
|
~BaseSet()
|
||||||
{
|
{
|
||||||
for (uint i = 0; i < NUM_FILES; i++) {
|
|
||||||
free(this->files[i].filename);
|
|
||||||
free(this->files[i].missing_warning);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete this->next;
|
delete this->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,7 +95,7 @@ struct BaseSet {
|
|||||||
return Tnum_files - this->valid_files;
|
return Tnum_files - this->valid_files;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FillSetDetails(IniFile *ini, const char *path, const char *full_filename, bool allow_empty_filename = true);
|
bool FillSetDetails(IniFile *ini, const std::string &path, const std::string &full_filename, bool allow_empty_filename = true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the description for the given ISO code.
|
* Get the description for the given ISO code.
|
||||||
@@ -147,7 +142,7 @@ struct BaseSet {
|
|||||||
const char *GetTextfile(TextfileType type) const
|
const char *GetTextfile(TextfileType type) const
|
||||||
{
|
{
|
||||||
for (uint i = 0; i < NUM_FILES; i++) {
|
for (uint i = 0; i < NUM_FILES; i++) {
|
||||||
const char *textfile = ::GetTextfile(type, BASESET_DIR, this->files[i].filename);
|
const char *textfile = ::GetTextfile(type, BASESET_DIR, this->files[i].filename.c_str());
|
||||||
if (textfile != nullptr) {
|
if (textfile != nullptr) {
|
||||||
return textfile;
|
return textfile;
|
||||||
}
|
}
|
||||||
@@ -249,7 +244,7 @@ struct GraphicsSet : BaseSet<GraphicsSet, MAX_GFT, true> {
|
|||||||
PaletteType palette; ///< Palette of this graphics set
|
PaletteType palette; ///< Palette of this graphics set
|
||||||
BlitterType blitter; ///< Blitter of this graphics set
|
BlitterType blitter; ///< Blitter of this graphics set
|
||||||
|
|
||||||
bool FillSetDetails(struct IniFile *ini, const char *path, const char *full_filename);
|
bool FillSetDetails(struct IniFile *ini, const std::string &path, const std::string &full_filename);
|
||||||
|
|
||||||
static MD5File::ChecksumResult CheckMD5(const MD5File *file, Subdirectory subdir);
|
static MD5File::ChecksumResult CheckMD5(const MD5File *file, Subdirectory subdir);
|
||||||
};
|
};
|
||||||
@@ -279,8 +274,8 @@ static const uint NUM_SONGS_AVAILABLE = 1 + NUM_SONG_CLASSES * NUM_SONGS_CLASS;
|
|||||||
static const uint NUM_SONGS_PLAYLIST = 32;
|
static const uint NUM_SONGS_PLAYLIST = 32;
|
||||||
|
|
||||||
/* Functions to read DOS music CAT files, similar to but not quite the same as sound effect CAT files */
|
/* Functions to read DOS music CAT files, similar to but not quite the same as sound effect CAT files */
|
||||||
char *GetMusicCatEntryName(const char *filename, size_t entrynum);
|
char *GetMusicCatEntryName(const std::string &filename, size_t entrynum);
|
||||||
byte *GetMusicCatEntryData(const char *filename, size_t entrynum, size_t &entrylen);
|
byte *GetMusicCatEntryData(const std::string &filename, size_t entrynum, size_t &entrylen);
|
||||||
|
|
||||||
enum MusicTrackType {
|
enum MusicTrackType {
|
||||||
MTT_STANDARDMIDI, ///< Standard MIDI file
|
MTT_STANDARDMIDI, ///< Standard MIDI file
|
||||||
@@ -291,7 +286,7 @@ enum MusicTrackType {
|
|||||||
struct MusicSongInfo {
|
struct MusicSongInfo {
|
||||||
std::string songname; ///< name of song displayed in UI
|
std::string songname; ///< name of song displayed in UI
|
||||||
byte tracknr; ///< track number of song displayed in UI
|
byte tracknr; ///< track number of song displayed in UI
|
||||||
const char *filename; ///< file on disk containing song (when used in MusicSet class, this pointer is owned by MD5File object for the file)
|
std::string filename; ///< file on disk containing song (when used in MusicSet class)
|
||||||
MusicTrackType filetype; ///< decoder required for song file
|
MusicTrackType filetype; ///< decoder required for song file
|
||||||
int cat_index; ///< entry index in CAT file, for filetype==MTT_MPSMIDI
|
int cat_index; ///< entry index in CAT file, for filetype==MTT_MPSMIDI
|
||||||
bool loop; ///< song should play in a tight loop if possible, never ending
|
bool loop; ///< song should play in a tight loop if possible, never ending
|
||||||
@@ -306,7 +301,7 @@ struct MusicSet : BaseSet<MusicSet, NUM_SONGS_AVAILABLE, false> {
|
|||||||
/** Number of valid songs in set. */
|
/** Number of valid songs in set. */
|
||||||
byte num_available;
|
byte num_available;
|
||||||
|
|
||||||
bool FillSetDetails(struct IniFile *ini, const char *path, const char *full_filename);
|
bool FillSetDetails(struct IniFile *ini, const std::string &path, const std::string &full_filename);
|
||||||
};
|
};
|
||||||
|
|
||||||
/** All data/functions related with replacing the base music */
|
/** All data/functions related with replacing the base music */
|
||||||
|
@@ -25,7 +25,7 @@ extern void CheckExternalFiles();
|
|||||||
item = metadata->GetItem(name, false); \
|
item = metadata->GetItem(name, false); \
|
||||||
if (item == nullptr || !item->value.has_value() || item->value->empty()) { \
|
if (item == nullptr || !item->value.has_value() || item->value->empty()) { \
|
||||||
DEBUG(grf, 0, "Base " SET_TYPE "set detail loading: %s field missing.", name); \
|
DEBUG(grf, 0, "Base " SET_TYPE "set detail loading: %s field missing.", name); \
|
||||||
DEBUG(grf, 0, " Is %s readable for the user running OpenTTD?", full_filename); \
|
DEBUG(grf, 0, " Is %s readable for the user running OpenTTD?", full_filename.c_str()); \
|
||||||
return false; \
|
return false; \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ extern void CheckExternalFiles();
|
|||||||
* @return true if loading was successful.
|
* @return true if loading was successful.
|
||||||
*/
|
*/
|
||||||
template <class T, size_t Tnum_files, bool Tsearch_in_tars>
|
template <class T, size_t Tnum_files, bool Tsearch_in_tars>
|
||||||
bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const char *path, const char *full_filename, bool allow_empty_filename)
|
bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const std::string &path, const std::string &full_filename, bool allow_empty_filename)
|
||||||
{
|
{
|
||||||
IniGroup *metadata = ini->GetGroup("metadata");
|
IniGroup *metadata = ini->GetGroup("metadata");
|
||||||
IniItem *item;
|
IniItem *item;
|
||||||
@@ -76,25 +76,25 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
|||||||
/* Find the filename first. */
|
/* Find the filename first. */
|
||||||
item = files->GetItem(BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i], false);
|
item = files->GetItem(BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i], false);
|
||||||
if (item == nullptr || (!item->value.has_value() && !allow_empty_filename)) {
|
if (item == nullptr || (!item->value.has_value() && !allow_empty_filename)) {
|
||||||
DEBUG(grf, 0, "No " SET_TYPE " file for: %s (in %s)", BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i], full_filename);
|
DEBUG(grf, 0, "No " SET_TYPE " file for: %s (in %s)", BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i], full_filename.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!item->value.has_value()) {
|
if (!item->value.has_value()) {
|
||||||
file->filename = nullptr;
|
file->filename.clear();
|
||||||
/* If we list no file, that file must be valid */
|
/* If we list no file, that file must be valid */
|
||||||
this->valid_files++;
|
this->valid_files++;
|
||||||
this->found_files++;
|
this->found_files++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *filename = item->value->c_str();
|
const std::string &filename = item->value.value();
|
||||||
file->filename = str_fmt("%s%s", path, filename);
|
file->filename = path + filename;
|
||||||
|
|
||||||
/* Then find the MD5 checksum */
|
/* Then find the MD5 checksum */
|
||||||
item = md5s->GetItem(filename, false);
|
item = md5s->GetItem(filename, false);
|
||||||
if (item == nullptr || !item->value.has_value()) {
|
if (item == nullptr || !item->value.has_value()) {
|
||||||
DEBUG(grf, 0, "No MD5 checksum specified for: %s (in %s)", filename, full_filename);
|
DEBUG(grf, 0, "No MD5 checksum specified for: %s (in %s)", filename.c_str(), full_filename.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const char *c = item->value->c_str();
|
const char *c = item->value->c_str();
|
||||||
@@ -107,7 +107,7 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
|||||||
} else if ('A' <= *c && *c <= 'F') {
|
} else if ('A' <= *c && *c <= 'F') {
|
||||||
j = *c - 'A' + 10;
|
j = *c - 'A' + 10;
|
||||||
} else {
|
} else {
|
||||||
DEBUG(grf, 0, "Malformed MD5 checksum specified for: %s (in %s)", filename, full_filename);
|
DEBUG(grf, 0, "Malformed MD5 checksum specified for: %s (in %s)", filename.c_str(), full_filename.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (i % 2 == 0) {
|
if (i % 2 == 0) {
|
||||||
@@ -121,10 +121,10 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
|||||||
item = origin->GetItem(filename, false);
|
item = origin->GetItem(filename, false);
|
||||||
if (item == nullptr) item = origin->GetItem("default", false);
|
if (item == nullptr) item = origin->GetItem("default", false);
|
||||||
if (item == nullptr || !item->value.has_value()) {
|
if (item == nullptr || !item->value.has_value()) {
|
||||||
DEBUG(grf, 1, "No origin warning message specified for: %s", filename);
|
DEBUG(grf, 1, "No origin warning message specified for: %s", filename.c_str());
|
||||||
file->missing_warning = stredup("");
|
file->missing_warning.clear();
|
||||||
} else {
|
} else {
|
||||||
file->missing_warning = stredup(item->value->c_str());
|
file->missing_warning = item->value.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
file->check_result = T::CheckMD5(file, BASESET_DIR);
|
file->check_result = T::CheckMD5(file, BASESET_DIR);
|
||||||
@@ -138,12 +138,12 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MD5File::CR_MISMATCH:
|
case MD5File::CR_MISMATCH:
|
||||||
DEBUG(grf, 1, "MD5 checksum mismatch for: %s (in %s)", filename, full_filename);
|
DEBUG(grf, 1, "MD5 checksum mismatch for: %s (in %s)", filename.c_str(), full_filename.c_str());
|
||||||
this->found_files++;
|
this->found_files++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MD5File::CR_NO_FILE:
|
case MD5File::CR_NO_FILE:
|
||||||
DEBUG(grf, 1, "The file %s specified in %s is missing", filename, full_filename);
|
DEBUG(grf, 1, "The file %s specified in %s is missing", filename.c_str(), full_filename.c_str());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -169,7 +169,7 @@ bool BaseMedia<Tbase_set>::AddFile(const std::string &filename, size_t basepath_
|
|||||||
path.clear();
|
path.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set->FillSetDetails(ini, path.c_str(), filename.c_str())) {
|
if (set->FillSetDetails(ini, path, filename)) {
|
||||||
Tbase_set *duplicate = nullptr;
|
Tbase_set *duplicate = nullptr;
|
||||||
for (Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != nullptr; c = c->next) {
|
for (Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != nullptr; c = c->next) {
|
||||||
if (c->name == set->name || c->shortname == set->shortname) {
|
if (c->name == set->name || c->shortname == set->shortname) {
|
||||||
@@ -282,7 +282,7 @@ template <class Tbase_set> const char *TryGetBaseSetFile(const ContentInfo *ci,
|
|||||||
if (s->GetNumMissing() != 0) continue;
|
if (s->GetNumMissing() != 0) continue;
|
||||||
|
|
||||||
if (s->shortname != ci->unique_id) continue;
|
if (s->shortname != ci->unique_id) continue;
|
||||||
if (!md5sum) return s->files[0].filename;
|
if (!md5sum) return s->files[0].filename.c_str();
|
||||||
|
|
||||||
byte md5[16];
|
byte md5[16];
|
||||||
memset(md5, 0, sizeof(md5));
|
memset(md5, 0, sizeof(md5));
|
||||||
@@ -291,7 +291,7 @@ template <class Tbase_set> const char *TryGetBaseSetFile(const ContentInfo *ci,
|
|||||||
md5[j] ^= s->files[i].hash[j];
|
md5[j] ^= s->files[i].hash[j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (memcmp(md5, ci->md5sum, sizeof(md5)) == 0) return s->files[0].filename;
|
if (memcmp(md5, ci->md5sum, sizeof(md5)) == 0) return s->files[0].filename.c_str();
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@@ -1217,7 +1217,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li
|
|||||||
if (show_count) {
|
if (show_count) {
|
||||||
replace_icon = GetSpriteSize(SPR_GROUP_REPLACE_ACTIVE);
|
replace_icon = GetSpriteSize(SPR_GROUP_REPLACE_ACTIVE);
|
||||||
SetDParamMaxDigits(0, 3, FS_SMALL);
|
SetDParamMaxDigits(0, 3, FS_SMALL);
|
||||||
count_width = GetStringBoundingBox(STR_TINY_BLACK_COMA).width;
|
count_width = GetStringBoundingBox(STR_TINY_BLACK_COMMA).width;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rect tr = ir.Indent(circle_width + WidgetDimensions::scaled.hsep_normal + sprite_width + WidgetDimensions::scaled.hsep_wide, rtl); // Name position
|
Rect tr = ir.Indent(circle_width + WidgetDimensions::scaled.hsep_normal + sprite_width + WidgetDimensions::scaled.hsep_wide, rtl); // Name position
|
||||||
@@ -1256,7 +1256,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li
|
|||||||
DrawVehicleEngine(r.left, r.right, sprite_x, y + sprite_y_offset, item.engine_id, (show_count && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(item.engine_id, _local_company), EIT_PURCHASE);
|
DrawVehicleEngine(r.left, r.right, sprite_x, y + sprite_y_offset, item.engine_id, (show_count && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(item.engine_id, _local_company), EIT_PURCHASE);
|
||||||
if (show_count) {
|
if (show_count) {
|
||||||
SetDParam(0, num_engines);
|
SetDParam(0, num_engines);
|
||||||
DrawString(cr.left, cr.right, y + small_text_y_offset, STR_TINY_BLACK_COMA, TC_FROMSTRING, SA_RIGHT | SA_FORCE);
|
DrawString(cr.left, cr.right, y + small_text_y_offset, STR_TINY_BLACK_COMMA, TC_FROMSTRING, SA_RIGHT | SA_FORCE);
|
||||||
if (EngineHasReplacementForCompany(Company::Get(_local_company), item.engine_id, selected_group)) DrawSprite(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, rr.left, y + replace_icon_y_offset);
|
if (EngineHasReplacementForCompany(Company::Get(_local_company), item.engine_id, selected_group)) DrawSprite(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, rr.left, y + replace_icon_y_offset);
|
||||||
}
|
}
|
||||||
if (has_variants) {
|
if (has_variants) {
|
||||||
@@ -1618,7 +1618,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
|
|||||||
* and if not, reset selection to INVALID_ENGINE. This could be the case
|
* and if not, reset selection to INVALID_ENGINE. This could be the case
|
||||||
* when engines become obsolete and are removed */
|
* when engines become obsolete and are removed */
|
||||||
for (const Engine *e : Engine::IterateType(VEH_TRAIN)) {
|
for (const Engine *e : Engine::IterateType(VEH_TRAIN)) {
|
||||||
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
|
if (!this->show_hidden_engines && e->IsVariantHidden(_local_company)) continue;
|
||||||
EngineID eid = e->index;
|
EngineID eid = e->index;
|
||||||
const RailVehicleInfo *rvi = &e->u.rail;
|
const RailVehicleInfo *rvi = &e->u.rail;
|
||||||
|
|
||||||
@@ -1669,7 +1669,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
|
|||||||
this->eng_list.clear();
|
this->eng_list.clear();
|
||||||
|
|
||||||
for (const Engine *e : Engine::IterateType(VEH_ROAD)) {
|
for (const Engine *e : Engine::IterateType(VEH_ROAD)) {
|
||||||
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
|
if (!this->show_hidden_engines && e->IsVariantHidden(_local_company)) continue;
|
||||||
EngineID eid = e->index;
|
EngineID eid = e->index;
|
||||||
if (!IsEngineBuildable(eid, VEH_ROAD, _local_company)) continue;
|
if (!IsEngineBuildable(eid, VEH_ROAD, _local_company)) continue;
|
||||||
if (this->filter.roadtype != INVALID_ROADTYPE && !HasPowerOnRoad(e->u.road.roadtype, this->filter.roadtype)) continue;
|
if (this->filter.roadtype != INVALID_ROADTYPE && !HasPowerOnRoad(e->u.road.roadtype, this->filter.roadtype)) continue;
|
||||||
@@ -1688,7 +1688,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
|
|||||||
this->eng_list.clear();
|
this->eng_list.clear();
|
||||||
|
|
||||||
for (const Engine *e : Engine::IterateType(VEH_SHIP)) {
|
for (const Engine *e : Engine::IterateType(VEH_SHIP)) {
|
||||||
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
|
if (!this->show_hidden_engines && e->IsVariantHidden(_local_company)) continue;
|
||||||
EngineID eid = e->index;
|
EngineID eid = e->index;
|
||||||
if (!IsEngineBuildable(eid, VEH_SHIP, _local_company)) continue;
|
if (!IsEngineBuildable(eid, VEH_SHIP, _local_company)) continue;
|
||||||
this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
|
this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
|
||||||
@@ -1712,7 +1712,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
|
|||||||
* and if not, reset selection to INVALID_ENGINE. This could be the case
|
* and if not, reset selection to INVALID_ENGINE. This could be the case
|
||||||
* when planes become obsolete and are removed */
|
* when planes become obsolete and are removed */
|
||||||
for (const Engine *e : Engine::IterateType(VEH_AIRCRAFT)) {
|
for (const Engine *e : Engine::IterateType(VEH_AIRCRAFT)) {
|
||||||
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
|
if (!this->show_hidden_engines && e->IsVariantHidden(_local_company)) continue;
|
||||||
EngineID eid = e->index;
|
EngineID eid = e->index;
|
||||||
if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_company)) continue;
|
if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_company)) continue;
|
||||||
/* First VEH_END window_numbers are fake to allow a window open for all different types at once */
|
/* First VEH_END window_numbers are fake to allow a window open for all different types at once */
|
||||||
@@ -2481,7 +2481,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
|
|||||||
* and if not, reset selection to INVALID_ENGINE. This could be the case
|
* and if not, reset selection to INVALID_ENGINE. This could be the case
|
||||||
* when engines become obsolete and are removed */
|
* when engines become obsolete and are removed */
|
||||||
for (const Engine *engine : Engine::IterateType(VEH_TRAIN)) {
|
for (const Engine *engine : Engine::IterateType(VEH_TRAIN)) {
|
||||||
if (!state.show_hidden && engine->IsHidden(_local_company)) continue;
|
if (!state.show_hidden && engine->IsVariantHidden(_local_company)) continue;
|
||||||
EngineID eid = engine->index;
|
EngineID eid = engine->index;
|
||||||
const RailVehicleInfo *rvi = &engine->u.rail;
|
const RailVehicleInfo *rvi = &engine->u.rail;
|
||||||
|
|
||||||
|
@@ -98,23 +98,28 @@ extern void EnginesMonthlyLoop();
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle changing of the current year.
|
* Handle changing of the current year.
|
||||||
* @param p1 Unused.
|
* @param p1 The chosen year to change to.
|
||||||
* @param p2 +1 (increase) or -1 (decrease).
|
* @param p2 +1 (increase) or -1 (decrease).
|
||||||
* @return New year.
|
* @return New year.
|
||||||
*/
|
*/
|
||||||
static int32 ClickChangeDateCheat(int32 p1, int32 p2)
|
static int32 ClickChangeDateCheat(int32 p1, int32 p2)
|
||||||
{
|
{
|
||||||
YearMonthDay ymd;
|
/* Don't allow changing to an invalid year, or the current year. */
|
||||||
ConvertDateToYMD(_date, &ymd);
|
|
||||||
|
|
||||||
p1 = Clamp(p1, MIN_YEAR, MAX_YEAR);
|
p1 = Clamp(p1, MIN_YEAR, MAX_YEAR);
|
||||||
if (p1 == _cur_year) return _cur_year;
|
if (p1 == _cur_year) return _cur_year;
|
||||||
|
|
||||||
|
YearMonthDay ymd;
|
||||||
|
ConvertDateToYMD(_date, &ymd);
|
||||||
Date new_date = ConvertYMDToDate(p1, ymd.month, ymd.day);
|
Date new_date = ConvertYMDToDate(p1, ymd.month, ymd.day);
|
||||||
|
|
||||||
|
/* Shift cached dates. */
|
||||||
LinkGraphSchedule::instance.ShiftDates(new_date - _date);
|
LinkGraphSchedule::instance.ShiftDates(new_date - _date);
|
||||||
ShiftOrderDates(new_date - _date);
|
ShiftOrderDates(new_date - _date);
|
||||||
ShiftVehicleDates(new_date - _date);
|
ShiftVehicleDates(new_date - _date);
|
||||||
|
|
||||||
|
/* Change the date. */
|
||||||
SetDate(new_date, _date_fract);
|
SetDate(new_date, _date_fract);
|
||||||
|
|
||||||
EnginesMonthlyLoop();
|
EnginesMonthlyLoop();
|
||||||
InvalidateWindowClassesData(WC_BUILD_STATION, 0);
|
InvalidateWindowClassesData(WC_BUILD_STATION, 0);
|
||||||
InvalidateWindowClassesData(WC_BUS_STATION, 0);
|
InvalidateWindowClassesData(WC_BUS_STATION, 0);
|
||||||
|
@@ -28,14 +28,14 @@
|
|||||||
|
|
||||||
|
|
||||||
/** Operators to allow to work with enum as with type safe bit set in C++ */
|
/** Operators to allow to work with enum as with type safe bit set in C++ */
|
||||||
# define DECLARE_ENUM_AS_BIT_SET(mask_t) \
|
#define DECLARE_ENUM_AS_BIT_SET(enum_type) \
|
||||||
inline constexpr mask_t operator | (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 | (std::underlying_type<mask_t>::type)m2);} \
|
inline constexpr enum_type operator | (enum_type m1, enum_type m2) {return (enum_type)((std::underlying_type<enum_type>::type)m1 | (std::underlying_type<enum_type>::type)m2);} \
|
||||||
inline constexpr mask_t operator & (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 & (std::underlying_type<mask_t>::type)m2);} \
|
inline constexpr enum_type operator & (enum_type m1, enum_type m2) {return (enum_type)((std::underlying_type<enum_type>::type)m1 & (std::underlying_type<enum_type>::type)m2);} \
|
||||||
inline constexpr mask_t operator ^ (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 ^ (std::underlying_type<mask_t>::type)m2);} \
|
inline constexpr enum_type operator ^ (enum_type m1, enum_type m2) {return (enum_type)((std::underlying_type<enum_type>::type)m1 ^ (std::underlying_type<enum_type>::type)m2);} \
|
||||||
inline constexpr mask_t& operator |= (mask_t& m1, mask_t m2) {m1 = m1 | m2; return m1;} \
|
inline constexpr enum_type& operator |= (enum_type& m1, enum_type m2) {m1 = m1 | m2; return m1;} \
|
||||||
inline constexpr mask_t& operator &= (mask_t& m1, mask_t m2) {m1 = m1 & m2; return m1;} \
|
inline constexpr enum_type& operator &= (enum_type& m1, enum_type m2) {m1 = m1 & m2; return m1;} \
|
||||||
inline constexpr mask_t& operator ^= (mask_t& m1, mask_t m2) {m1 = m1 ^ m2; return m1;} \
|
inline constexpr enum_type& operator ^= (enum_type& m1, enum_type m2) {m1 = m1 ^ m2; return m1;} \
|
||||||
inline constexpr mask_t operator ~(mask_t m) {return (mask_t)(~(std::underlying_type<mask_t>::type)m);}
|
inline constexpr enum_type operator ~(enum_type m) {return (enum_type)(~(std::underlying_type<enum_type>::type)m);}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -523,6 +523,30 @@ StringID Engine::GetAircraftTypeText() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the engine variant chain is hidden in the GUI for the given company.
|
||||||
|
* @param c Company to check.
|
||||||
|
* @return \c true iff the engine variant chain is hidden in the GUI for the given company.
|
||||||
|
*/
|
||||||
|
bool Engine::IsVariantHidden(CompanyID c) const
|
||||||
|
{
|
||||||
|
/* In case company is spectator. */
|
||||||
|
if (c >= MAX_COMPANIES) return false;
|
||||||
|
|
||||||
|
/* Shortcut if this engine is explicitly hidden. */
|
||||||
|
if (this->IsHidden(c)) return true;
|
||||||
|
|
||||||
|
/* Check for hidden parent variants. This is a bit convoluted as we must check hidden status of
|
||||||
|
* the last display variant rather than the actual parent variant. */
|
||||||
|
const Engine *re = this;
|
||||||
|
const Engine *ve = re->GetDisplayVariant();
|
||||||
|
while (!(ve->IsHidden(c)) && re->info.variant_id != INVALID_ENGINE && re->info.variant_id != re->index) {
|
||||||
|
re = Engine::Get(re->info.variant_id);
|
||||||
|
ve = re->GetDisplayVariant();
|
||||||
|
}
|
||||||
|
return ve->IsHidden(c);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the #EngineOverrideManager with the default engines.
|
* Initializes the #EngineOverrideManager with the default engines.
|
||||||
*/
|
*/
|
||||||
|
@@ -153,6 +153,18 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> {
|
|||||||
return c < MAX_COMPANIES && HasBit(this->company_hidden, c);
|
return c < MAX_COMPANIES && HasBit(this->company_hidden, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the last display variant for an engine.
|
||||||
|
* @return Engine's last display variant or engine itself if no last display variant is set.
|
||||||
|
*/
|
||||||
|
const Engine *GetDisplayVariant() const
|
||||||
|
{
|
||||||
|
if (this->display_last_variant == this->index || this->display_last_variant == INVALID_ENGINE) return this;
|
||||||
|
return Engine::Get(this->display_last_variant);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsVariantHidden(CompanyID c) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the engine is a ground vehicle.
|
* Check if the engine is a ground vehicle.
|
||||||
* @return True iff the engine is a train or a road vehicle.
|
* @return True iff the engine is a train or a road vehicle.
|
||||||
|
@@ -140,7 +140,7 @@ void FioFCloseFile(FILE *f)
|
|||||||
* @param filename Filename to look for.
|
* @param filename Filename to look for.
|
||||||
* @return String containing the path if the path was found, else an empty string.
|
* @return String containing the path if the path was found, else an empty string.
|
||||||
*/
|
*/
|
||||||
std::string FioFindFullPath(Subdirectory subdir, const char *filename)
|
std::string FioFindFullPath(Subdirectory subdir, const std::string &filename)
|
||||||
{
|
{
|
||||||
assert(subdir < NUM_SUBDIRS);
|
assert(subdir < NUM_SUBDIRS);
|
||||||
|
|
||||||
|
@@ -18,7 +18,7 @@
|
|||||||
void FioFCloseFile(FILE *f);
|
void FioFCloseFile(FILE *f);
|
||||||
FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr, std::string *output_filename = nullptr);
|
FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr, std::string *output_filename = nullptr);
|
||||||
bool FioCheckFileExists(const std::string &filename, Subdirectory subdir);
|
bool FioCheckFileExists(const std::string &filename, Subdirectory subdir);
|
||||||
std::string FioFindFullPath(Subdirectory subdir, const char *filename);
|
std::string FioFindFullPath(Subdirectory subdir, const std::string &filename);
|
||||||
std::string FioGetDirectory(Searchpath sp, Subdirectory subdir);
|
std::string FioGetDirectory(Searchpath sp, Subdirectory subdir);
|
||||||
std::string FioFindDirectory(Subdirectory subdir);
|
std::string FioFindDirectory(Subdirectory subdir);
|
||||||
void FioCreateDirectory(const std::string &name);
|
void FioCreateDirectory(const std::string &name);
|
||||||
|
@@ -48,16 +48,16 @@ static const SpriteID * const _landscape_spriteindexes[] = {
|
|||||||
* @param load_index The offset of the first sprite.
|
* @param load_index The offset of the first sprite.
|
||||||
* @param needs_palette_remap Whether the colours in the GRF file need a palette remap.
|
* @param needs_palette_remap Whether the colours in the GRF file need a palette remap.
|
||||||
*/
|
*/
|
||||||
static SpriteFile &LoadGrfFile(const char *filename, uint load_index, bool needs_palette_remap)
|
static SpriteFile &LoadGrfFile(const std::string &filename, uint load_index, bool needs_palette_remap)
|
||||||
{
|
{
|
||||||
uint sprite_id = 0;
|
uint sprite_id = 0;
|
||||||
|
|
||||||
SpriteFile &file = OpenCachedSpriteFile(filename, BASESET_DIR, needs_palette_remap);
|
SpriteFile &file = OpenCachedSpriteFile(filename, BASESET_DIR, needs_palette_remap);
|
||||||
|
|
||||||
DEBUG(sprite, 2, "Reading grf-file '%s'", filename);
|
DEBUG(sprite, 2, "Reading grf-file '%s'", filename.c_str());
|
||||||
|
|
||||||
byte container_ver = file.GetContainerVersion();
|
byte container_ver = file.GetContainerVersion();
|
||||||
if (container_ver == 0) usererror("Base grf '%s' is corrupt", filename);
|
if (container_ver == 0) usererror("Base grf '%s' is corrupt", filename.c_str());
|
||||||
ReadGRFSpriteOffsets(file);
|
ReadGRFSpriteOffsets(file);
|
||||||
if (container_ver >= 2) {
|
if (container_ver >= 2) {
|
||||||
/* Read compression. */
|
/* Read compression. */
|
||||||
@@ -84,17 +84,17 @@ static SpriteFile &LoadGrfFile(const char *filename, uint load_index, bool needs
|
|||||||
* @param needs_palette_remap Whether the colours in the GRF file need a palette remap.
|
* @param needs_palette_remap Whether the colours in the GRF file need a palette remap.
|
||||||
* @return The number of loaded sprites.
|
* @return The number of loaded sprites.
|
||||||
*/
|
*/
|
||||||
static void LoadGrfFileIndexed(const char *filename, const SpriteID *index_tbl, bool needs_palette_remap)
|
static void LoadGrfFileIndexed(const std::string &filename, const SpriteID *index_tbl, bool needs_palette_remap)
|
||||||
{
|
{
|
||||||
uint start;
|
uint start;
|
||||||
uint sprite_id = 0;
|
uint sprite_id = 0;
|
||||||
|
|
||||||
SpriteFile &file = OpenCachedSpriteFile(filename, BASESET_DIR, needs_palette_remap);
|
SpriteFile &file = OpenCachedSpriteFile(filename, BASESET_DIR, needs_palette_remap);
|
||||||
|
|
||||||
DEBUG(sprite, 2, "Reading indexed grf-file '%s'", filename);
|
DEBUG(sprite, 2, "Reading indexed grf-file '%s'", filename.c_str());
|
||||||
|
|
||||||
byte container_ver = file.GetContainerVersion();
|
byte container_ver = file.GetContainerVersion();
|
||||||
if (container_ver == 0) usererror("Base grf '%s' is corrupt", filename);
|
if (container_ver == 0) usererror("Base grf '%s' is corrupt", filename.c_str());
|
||||||
ReadGRFSpriteOffsets(file);
|
ReadGRFSpriteOffsets(file);
|
||||||
if (container_ver >= 2) {
|
if (container_ver >= 2) {
|
||||||
/* Read compression. */
|
/* Read compression. */
|
||||||
@@ -142,7 +142,7 @@ void CheckExternalFiles()
|
|||||||
add_pos += seprintf(add_pos, last, "Trying to load graphics set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", used_set->name.c_str());
|
add_pos += seprintf(add_pos, last, "Trying to load graphics set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", used_set->name.c_str());
|
||||||
for (uint i = 0; i < GraphicsSet::NUM_FILES; i++) {
|
for (uint i = 0; i < GraphicsSet::NUM_FILES; i++) {
|
||||||
MD5File::ChecksumResult res = GraphicsSet::CheckMD5(&used_set->files[i], BASESET_DIR);
|
MD5File::ChecksumResult res = GraphicsSet::CheckMD5(&used_set->files[i], BASESET_DIR);
|
||||||
if (res != MD5File::CR_MATCH) add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", used_set->files[i].filename, res == MD5File::CR_MISMATCH ? "corrupt" : "missing", used_set->files[i].missing_warning);
|
if (res != MD5File::CR_MATCH) add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", used_set->files[i].filename.c_str(), res == MD5File::CR_MISMATCH ? "corrupt" : "missing", used_set->files[i].missing_warning.c_str());
|
||||||
}
|
}
|
||||||
add_pos += seprintf(add_pos, last, "\n");
|
add_pos += seprintf(add_pos, last, "\n");
|
||||||
}
|
}
|
||||||
@@ -154,7 +154,7 @@ void CheckExternalFiles()
|
|||||||
static_assert(SoundsSet::NUM_FILES == 1);
|
static_assert(SoundsSet::NUM_FILES == 1);
|
||||||
/* No need to loop each file, as long as there is only a single
|
/* No need to loop each file, as long as there is only a single
|
||||||
* sound file. */
|
* sound file. */
|
||||||
add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", sounds_set->files->filename, SoundsSet::CheckMD5(sounds_set->files, BASESET_DIR) == MD5File::CR_MISMATCH ? "corrupt" : "missing", sounds_set->files->missing_warning);
|
add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", sounds_set->files->filename.c_str(), SoundsSet::CheckMD5(sounds_set->files, BASESET_DIR) == MD5File::CR_MISMATCH ? "corrupt" : "missing", sounds_set->files->missing_warning.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (add_pos != error_msg) ShowInfoF("%s", error_msg);
|
if (add_pos != error_msg) ShowInfoF("%s", error_msg);
|
||||||
@@ -257,7 +257,7 @@ static void LoadSpriteTables()
|
|||||||
ClrBit(master->flags, GCF_INIT_ONLY);
|
ClrBit(master->flags, GCF_INIT_ONLY);
|
||||||
|
|
||||||
/* Baseset extra graphics */
|
/* Baseset extra graphics */
|
||||||
GRFConfig *extra = new GRFConfig(used_set->files[GFT_EXTRA].filename);
|
GRFConfig *extra = new GRFConfig(used_set->files[GFT_EXTRA].filename.c_str());
|
||||||
|
|
||||||
/* We know the palette of the base set, so if the base NewGRF is not
|
/* We know the palette of the base set, so if the base NewGRF is not
|
||||||
* setting one, use the palette of the base set and not the global
|
* setting one, use the palette of the base set and not the global
|
||||||
@@ -542,7 +542,7 @@ void GfxLoadSprites()
|
|||||||
DEBUG(sprite, 2, "Completed loading sprite set %d", _settings_game.game_creation.landscape);
|
DEBUG(sprite, 2, "Completed loading sprite set %d", _settings_game.game_creation.landscape);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path, const char *full_filename)
|
bool GraphicsSet::FillSetDetails(IniFile *ini, const std::string &path, const std::string &full_filename)
|
||||||
{
|
{
|
||||||
bool ret = this->BaseSet<GraphicsSet, MAX_GFT, true>::FillSetDetails(ini, path, full_filename, false);
|
bool ret = this->BaseSet<GraphicsSet, MAX_GFT, true>::FillSetDetails(ini, path, full_filename, false);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@@ -21,6 +21,8 @@
|
|||||||
typedef Pool<Industry, IndustryID, 64, 64000> IndustryPool;
|
typedef Pool<Industry, IndustryID, 64, 64000> IndustryPool;
|
||||||
extern IndustryPool _industry_pool;
|
extern IndustryPool _industry_pool;
|
||||||
|
|
||||||
|
static const Year PROCESSING_INDUSTRY_ABANDONMENT_YEARS = 5; ///< If a processing industry doesn't produce for this many consecutive years, it may close.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Production level maximum, minimum and default values.
|
* Production level maximum, minimum and default values.
|
||||||
* It is not a value been really used in order to change, but rather an indicator
|
* It is not a value been really used in order to change, but rather an indicator
|
||||||
|
@@ -2937,7 +2937,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
|
|||||||
if ((i->ctlflags & INDCTL_NO_PRODUCTION_INCREASE) && (mul > 0 || increment > 0)) return;
|
if ((i->ctlflags & INDCTL_NO_PRODUCTION_INCREASE) && (mul > 0 || increment > 0)) return;
|
||||||
|
|
||||||
if (!callback_enabled && (indspec->life_type & INDUSTRYLIFE_PROCESSING)) {
|
if (!callback_enabled && (indspec->life_type & INDUSTRYLIFE_PROCESSING)) {
|
||||||
if ( (byte)(_cur_year - i->last_prod_year) >= 5 && Chance16(1, original_economy ? 2 : 180)) {
|
if ((_cur_year - i->last_prod_year) >= PROCESSING_INDUSTRY_ABANDONMENT_YEARS && Chance16(1, original_economy ? 2 : 180)) {
|
||||||
closeit = true;
|
closeit = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5229,7 +5229,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -4927,7 +4927,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -4961,7 +4961,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5701,7 +5701,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5602,7 +5602,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5050,7 +5050,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5602,7 +5602,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -1821,7 +1821,7 @@ STR_JUST_RAW_STRING :{STRING}
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5455,7 +5455,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5815,7 +5815,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5601,7 +5601,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5606,7 +5606,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5607,7 +5607,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{RAW_
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5110,6 +5110,7 @@ STR_ERROR_NO_BUOY :{WHITE}There is
|
|||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Can't timetable vehicle...
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Can't timetable vehicle...
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehicles can only wait at stations
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehicles can only wait at stations
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}This vehicle is not stopping at this station
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}This vehicle is not stopping at this station
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... timetable is incomplete
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... too many signs
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... too many signs
|
||||||
@@ -5606,7 +5607,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5110,6 +5110,7 @@ STR_ERROR_NO_BUOY :{WHITE}There is
|
|||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Can't timetable vehicle...
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Can't timetable vehicle...
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehicles can only wait at stations
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehicles can only wait at stations
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}This vehicle is not stopping at this station
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}This vehicle is not stopping at this station
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... timetable is incomplete
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... too many signs
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... too many signs
|
||||||
@@ -5606,7 +5607,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -4461,7 +4461,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5639,7 +5639,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -4603,7 +4603,7 @@ STR_JUST_RAW_STRING :{STRING}
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -1712,7 +1712,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kuinka paljon m
|
|||||||
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
|
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SERVINT_ISPERCENT :Huoltovälit ovat prosentteina: {STRING}
|
STR_CONFIG_SETTING_SERVINT_ISPERCENT :Huoltovälit ovat prosentteina: {STRING}
|
||||||
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Määritä, aiheuttaako edellisestä huollosta kulunut aika vai luotettavuuden laskeminen kulkuneuvon huoltamisen
|
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kun tämä on valittuna, kulkuneuvot yrittävät mennä huoltoon niiden luotettavuuden laskettua annetun prosenttiosuuden verran enimmäisluotettavuudesta.{}{}Jos esimerkiksi kulkuneuvon enimmäisluotettavuus on 90 % ja huoltoväli 20 %, kulkuneuvo pyrkii huoltoon luotettavuuden laskettua 72 %:iin.
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SERVINT_TRAINS :Junien oletushuoltoväli: {STRING}
|
STR_CONFIG_SETTING_SERVINT_TRAINS :Junien oletushuoltoväli: {STRING}
|
||||||
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Määritä oletushuoltoväli uusille junille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä
|
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Määritä oletushuoltoväli uusille junille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä
|
||||||
@@ -5110,6 +5110,7 @@ STR_ERROR_NO_BUOY :{WHITE}Poijua e
|
|||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Ei voi asettaa aikataulua.
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Ei voi asettaa aikataulua.
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Kulkuneuvo voi odottaa vain asemalla
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Kulkuneuvo voi odottaa vain asemalla
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Tämä kulkuneuvo ei pysähdy tällä asemalla
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Tämä kulkuneuvo ei pysähdy tällä asemalla
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}… aikataulu on puutteellinen
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... liian monta kylttiä.
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... liian monta kylttiä.
|
||||||
@@ -5606,7 +5607,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5607,7 +5607,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -4798,7 +4798,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5520,7 +5520,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -196,6 +196,7 @@ STR_UNITS_VELOCITY_IMPERIAL :{COMMA} mph
|
|||||||
STR_UNITS_VELOCITY_METRIC :{COMMA} km/h
|
STR_UNITS_VELOCITY_METRIC :{COMMA} km/h
|
||||||
STR_UNITS_VELOCITY_SI :{COMMA} m/s
|
STR_UNITS_VELOCITY_SI :{COMMA} m/s
|
||||||
STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}cadros/día
|
STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}cadros/día
|
||||||
|
STR_UNITS_VELOCITY_KNOTS :{COMMA}{NBSP}nudos
|
||||||
|
|
||||||
STR_UNITS_POWER_IMPERIAL :{COMMA}cv
|
STR_UNITS_POWER_IMPERIAL :{COMMA}cv
|
||||||
STR_UNITS_POWER_METRIC :{COMMA}cv
|
STR_UNITS_POWER_METRIC :{COMMA}cv
|
||||||
@@ -344,9 +345,9 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Abre a v
|
|||||||
###length 31
|
###length 31
|
||||||
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar partida
|
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar partida
|
||||||
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avance rápido da partida
|
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avance rápido da partida
|
||||||
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opcións
|
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opcións e axustes
|
||||||
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Gravar partida, abandonar partida, saír
|
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Gravar, cargar ou abandonar partida, saír do programa
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Amosa-lo mapa, ventá extra ou lista de rótulos
|
STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Amosa-lo mapa, ventá extra, fluxo de carga ou lista de rótulos
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Amosa-lo directorio de cidades
|
STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Amosa-lo directorio de cidades
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Amosa-las subvencións
|
STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Amosa-las subvencións
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Amosa-la lista das estacións da compañía
|
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Amosa-la lista das estacións da compañía
|
||||||
@@ -354,9 +355,9 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Amosa-la
|
|||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Amosa-la información xeral da compañía
|
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Amosa-la información xeral da compañía
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Mostrar historial
|
STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Mostrar historial
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK} Mostrar lista de obxectivos
|
STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK} Mostrar lista de obxectivos
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Amosa-las gráficas
|
STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Mostrar gráficos de compañías e taxas de pago de carga.
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Amosa-lo cadro da liga de compañías
|
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Amosa-lo cadro da liga de compañías
|
||||||
STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financia-la construción dunha nova industria ou listar tódalas industrias
|
STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Examinar as industrias ou financiar a construción dunha nova industria.
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Amosa-la lista dos trens da compañía. Ctrl+Click alterna entre lista de grupos/vehículos
|
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Amosa-la lista dos trens da compañía. Ctrl+Click alterna entre lista de grupos/vehículos
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Amosa-la lista dos vehículos de estrada da compañía. Ctrl+Click alterna entre lista de grupos/vehículos
|
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Amosa-la lista dos vehículos de estrada da compañía. Ctrl+Click alterna entre lista de grupos/vehículos
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Amosar a lista dos barcos da compañía. Ctrl+Click alterna entre lista de grupos/vehículos
|
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Amosar a lista dos barcos da compañía. Ctrl+Click alterna entre lista de grupos/vehículos
|
||||||
@@ -370,8 +371,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Constru
|
|||||||
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construír aeroportos
|
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construír aeroportos
|
||||||
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abri-la ferramenta de terreo para subir/baixar terreo, plantar árbores, etc.
|
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abri-la ferramenta de terreo para subir/baixar terreo, plantar árbores, etc.
|
||||||
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Amosa-la ventá de son/música
|
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Amosa-la ventá de son/música
|
||||||
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Amosa-la última mensaxe/nova, amosa-las opcións das mensaxes
|
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Amosa-la última mensaxe/nova, histórico de mensaxes ou borra todas as mensaxes
|
||||||
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Información dunha área de terreo, consola, depuración de scripts, capturas de pantalla, acerca de OpenTTD
|
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Información sobre a área de terra, capturas de pantalla, sobre OpenTTD e ferramentas de desenvolvedor.
|
||||||
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Intercambiar barras de ferramentas
|
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Intercambiar barras de ferramentas
|
||||||
|
|
||||||
# Extra tooltips for the scenario editor toolbar
|
# Extra tooltips for the scenario editor toolbar
|
||||||
@@ -1712,7 +1713,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Canta memoria p
|
|||||||
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
|
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervalos de servizo en porcentaxes: {STRING}
|
STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervalos de servizo en porcentaxes: {STRING}
|
||||||
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Permite escoller se o mantemento de vehículos comezará debido ao tempo transcurrido dende o último mantemento ou por unha redución da fiabilidade cando se sobrepase unha porcentaxe determinado
|
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Cando está habilitado, os vehículos intentan ser reparados cando a súa fiabilidade baixa unha porcentaxe dada da fiabilidade máxima.{}{}Por exemplo, se a fiabilidade máxima dun vehículo é do 90% e o intervalo de mantemento é do 20%, o vehículo tentará ser reparado cando alcance unha fiabilidade do 72%.
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalo de mantemento por defecto para trens: {STRING}
|
STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalo de mantemento por defecto para trens: {STRING}
|
||||||
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Fixa o intervalo de mantemento por defecto para trens novos, o cal se empregará no caso de que non se defina explicitamente un novo intervalo de mantemento para o vehículo
|
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Fixa o intervalo de mantemento por defecto para trens novos, o cal se empregará no caso de que non se defina explicitamente un novo intervalo de mantemento para o vehículo
|
||||||
@@ -1809,7 +1810,9 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Cando se activa
|
|||||||
|
|
||||||
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da compañía para compraventa de accións: {STRING}
|
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da compañía para compraventa de accións: {STRING}
|
||||||
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Establece a idade mínima dunha compañía para que outros poidan comprar e vender accións dela.
|
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Establece a idade mínima dunha compañía para que outros poidan comprar e vender accións dela.
|
||||||
|
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_VALUE :{COMMA} ano{P "" s}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_NO_MIN :Sen mínimo
|
||||||
|
|
||||||
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaxe do beneficio parcial a pagar en sistemas transitivos: {STRING}
|
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaxe do beneficio parcial a pagar en sistemas transitivos: {STRING}
|
||||||
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaxe dos beneficios asignados ás partes intermedias da ruta en sistemas transitivos, dando un maior control sobre os ingresos
|
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaxe dos beneficios asignados ás partes intermedias da ruta en sistemas transitivos, dando un maior control sobre os ingresos
|
||||||
@@ -1924,6 +1927,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ningunha
|
|||||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial do tamaño da cidade: {STRING}
|
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial do tamaño da cidade: {STRING}
|
||||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Relación entre o tamaño medio das cidades e o dos pobos ao inicio da partida
|
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Relación entre o tamaño medio das cidades e o dos pobos ao inicio da partida
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Actualizar o grafo de distribución cada {STRING}{NBSP}segundo{P 0:2 "" s}.
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos sucesivos do grafo de ligazóns. Cada recálculo calcula os plans para un compoñente do grafo. Iso significa que un valor X para esta configuración non significa que o grafo completo sexa actualizado cada X segundos. Só algúns compoñentes o serán. Canto máis curto sexa o tempo establecido, máis tempo de CPU será necesario para calculalo. Canto máis longo sexa o tempo establecido, máis tempo levará ata que a distribución de carga comece a percorrer novas rutas.
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Toma {STRING}{NBSP}segundo{P 0:2 "" s} para o recálculo do grafo de distribución.
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo necesario para cada recalculación dun compoñente do grafo de ligazóns. Cando se inicia unha recalculación, abrese un fío que se pode executar durante este número de segundos. Canto máis curto o establezas, máis probable é que o fío non remate cando se supón que debe facelo. Entón, o xogo detense ata que o fío remata («lag»). Canto máis longo o estabelezas, máis tempo levará actualizar a distribución cando cambien as rutas.
|
||||||
|
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribución para pasaxeiros: {STRING}
|
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribución para pasaxeiros: {STRING}
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que máis ou menos o mesmo número de pasaxeiros irán dende a estación A cada a estación B e tamén da B cara a A. "Asimétrico" significa que calquera número de pasaxeiros pode ir en calquera dirección. "manual" significa que non haberá distribución automática para os pasaxeiros.
|
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que máis ou menos o mesmo número de pasaxeiros irán dende a estación A cada a estación B e tamén da B cara a A. "Asimétrico" significa que calquera número de pasaxeiros pode ir en calquera dirección. "manual" significa que non haberá distribución automática para os pasaxeiros.
|
||||||
@@ -1949,13 +1956,15 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Fixar esta opci
|
|||||||
STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturación de rutas curtas antes de empregar rutas con capacidade: {STRING}
|
STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturación de rutas curtas antes de empregar rutas con capacidade: {STRING}
|
||||||
STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frecuentemente hai múltiples rutas posíbeis entre dúas estacións dadas. En primero lugar intentarase satura-la ruta máis curta, para posteriormente satura-la segunda máis curta e así sucesivamente. A saturación está determinada por unha estimación de capacidade e uso planificado. Unha vez saturadas tódalas rutas, se aínda queda demanda, sobrecargaranse as rutas comezando por aquelas de maior capacidade. A maior parte das veces, o algoritmo non estimará a capacidade con precisión. Esta opción permite especificar ata que porcentaxe de saturación pode ter unha ruta curta na primeira volta do algoritmo antes de escolle-la seguinte máis curta. Fíxao en menos do 100% para evitar estacións sobrecargadas no caso de que se sobreestime a capacidade.
|
STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frecuentemente hai múltiples rutas posíbeis entre dúas estacións dadas. En primero lugar intentarase satura-la ruta máis curta, para posteriormente satura-la segunda máis curta e así sucesivamente. A saturación está determinada por unha estimación de capacidade e uso planificado. Unha vez saturadas tódalas rutas, se aínda queda demanda, sobrecargaranse as rutas comezando por aquelas de maior capacidade. A maior parte das veces, o algoritmo non estimará a capacidade con precisión. Esta opción permite especificar ata que porcentaxe de saturación pode ter unha ruta curta na primeira volta do algoritmo antes de escolle-la seguinte máis curta. Fíxao en menos do 100% para evitar estacións sobrecargadas no caso de que se sobreestime a capacidade.
|
||||||
|
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade: {STRING}
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade (terra): {STRING}
|
||||||
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unidade de velocidade (náutica): {STRING}
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Cando unha velocidade apareza na interfaz de usuario, facelo nas unidades seleccionadas
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Cando unha velocidade apareza na interfaz de usuario, facelo nas unidades seleccionadas
|
||||||
###length 5
|
###length 5
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph)
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph)
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Métrico (km/h)
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Métrico (km/h)
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s)
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s)
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unidades do xogo (cadros/día)
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unidades do xogo (cadros/día)
|
||||||
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Nudos
|
||||||
|
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unidades de potencia dos vehículos: {STRING}
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unidades de potencia dos vehículos: {STRING}
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Cando a potencia dun vehículo se amose na interfaz de usuario, facelo nas unidades seleccionadas
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Cando a potencia dun vehículo se amose na interfaz de usuario, facelo nas unidades seleccionadas
|
||||||
@@ -2356,6 +2365,8 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nova compañí
|
|||||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Crear unha nova compañía e unirte a ela
|
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Crear unha nova compañía e unirte a ela
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Este es ti
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Este es ti
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Este é o anfitrión da partida
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Este é o anfitrión da partida
|
||||||
|
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cliente{P "" s} - {NUM}/{NUM} compañía{P "" "s"}
|
||||||
|
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}O número de clientes conectados actualmente, o número de compañías e o número máximo de compañías permitidas polo administrador do servidor.
|
||||||
|
|
||||||
# Matches ConnectionType
|
# Matches ConnectionType
|
||||||
###length 5
|
###length 5
|
||||||
@@ -4580,7 +4591,9 @@ STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}As IAs q
|
|||||||
STR_AI_CONFIG_HUMAN_PLAYER :Xogador humano
|
STR_AI_CONFIG_HUMAN_PLAYER :Xogador humano
|
||||||
STR_AI_CONFIG_RANDOM_AI :IA aleatoria
|
STR_AI_CONFIG_RANDOM_AI :IA aleatoria
|
||||||
STR_AI_CONFIG_NONE :(ningunha)
|
STR_AI_CONFIG_NONE :(ningunha)
|
||||||
|
STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM}
|
||||||
STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Nº máximo de opoñentes: {ORANGE}{COMMA}
|
STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Nº máximo de opoñentes: {ORANGE}{COMMA}
|
||||||
|
STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Intervalo entre o comezo dos competidores: {ORANGE}{COMMA} minuto{P "" s}
|
||||||
|
|
||||||
STR_AI_CONFIG_MOVE_UP :{BLACK}Subir
|
STR_AI_CONFIG_MOVE_UP :{BLACK}Subir
|
||||||
STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Mover a IA seleccionada cara arriba na lista
|
STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Mover a IA seleccionada cara arriba na lista
|
||||||
@@ -4593,7 +4606,7 @@ STR_AI_CONFIG_AI :{SILVER}IAs
|
|||||||
|
|
||||||
STR_AI_CONFIG_CHANGE_AI :{BLACK}Seleccionar IA
|
STR_AI_CONFIG_CHANGE_AI :{BLACK}Seleccionar IA
|
||||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Seleccionar script do xogo
|
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Seleccionar script do xogo
|
||||||
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Cargar outro script
|
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Cargar outro script. Ctrl+Click amosa todas as versións dispoñibles
|
||||||
STR_AI_CONFIG_CONFIGURE :{BLACK}Configurar
|
STR_AI_CONFIG_CONFIGURE :{BLACK}Configurar
|
||||||
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configurar os parámetros do script
|
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configurar os parámetros do script
|
||||||
|
|
||||||
@@ -5081,11 +5094,24 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... dema
|
|||||||
STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... o avión non ten autonomía suficiente
|
STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... o avión non ten autonomía suficiente
|
||||||
|
|
||||||
# Extra messages which go on the third line of errors, explaining why orders failed
|
# Extra messages which go on the third line of errors, explaining why orders failed
|
||||||
|
STR_ERROR_NO_RAIL_STATION :{WHITE}Non hai estación de ferrocarril
|
||||||
|
STR_ERROR_NO_BUS_STATION :{WHITE}Non hai estación de bus
|
||||||
|
STR_ERROR_NO_TRUCK_STATION :{WHITE}Non hai estación de camións
|
||||||
|
STR_ERROR_NO_DOCK :{WHITE}Non hai porto
|
||||||
|
STR_ERROR_NO_AIRPORT :{WHITE}Non hai aeroporto/heliporto
|
||||||
|
STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Non hai paradas con un tipo de estrada compatible.
|
||||||
|
STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Non hai paradas con un tipo de tranvía compatible
|
||||||
|
STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Non hai paradas que sexan axeitadas para vehículos articulados.{} Os vehículos articulados requiren dunha parada na que se poida pasar directamente, non unha parada en baía.
|
||||||
|
STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Este avión non pode aterrar neste heliporto
|
||||||
|
STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Este helicóptero non pode aterrar neste aeroporto
|
||||||
|
STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Non hai punto de ruta da liña férrea
|
||||||
|
STR_ERROR_NO_BUOY :{WHITE}Non hai boia
|
||||||
|
|
||||||
# Timetable related errors
|
# Timetable related errors
|
||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Non se pode axusta-lo horario do vehículo...
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Non se pode axusta-lo horario do vehículo...
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Os vehículos só poden parar nas estacións
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Os vehículos só poden parar nas estacións
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este vehículo non para nesta estación
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este vehículo non para nesta estación
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... horario incompleto
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... demasiados sinais
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... demasiados sinais
|
||||||
@@ -5582,7 +5608,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5597,7 +5597,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5687,7 +5687,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5278,7 +5278,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -1518,7 +1518,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5676,7 +5676,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -4846,7 +4846,7 @@ STR_JUST_RAW_STRING :{STRING}
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -1696,7 +1696,7 @@ STR_JUST_RAW_STRING :{STRING}
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5571,7 +5571,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5480,7 +5480,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5151,6 +5151,7 @@ STR_ERROR_NO_BUOY :{WHITE}Non c'è
|
|||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossibile dare un orario al veicolo...
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossibile dare un orario al veicolo...
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}I veicoli possono attendere solo alle stazioni
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}I veicoli possono attendere solo alle stazioni
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Il veicolo non ferma a questa stazione
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Il veicolo non ferma a questa stazione
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... l'orario è incompleto
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... troppi cartelli
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... troppi cartelli
|
||||||
@@ -5647,7 +5648,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5595,7 +5595,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -345,9 +345,9 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}경로
|
|||||||
###length 31
|
###length 31
|
||||||
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}게임을 일시 정지합니다.
|
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}게임을 일시 정지합니다.
|
||||||
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}게임 시간을 빠르게 가도록 합니다.
|
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}게임 시간을 빠르게 가도록 합니다.
|
||||||
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}게임 기본 설정을 엽니다.
|
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}게임 기본 설정을 엽니다
|
||||||
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}게임을 저장하거나, 그만두거나, 게임을 종료합니다
|
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}게임을 저장하거나, 불러오거나, 그만두거나, 게임을 종료합니다
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}지도, 외부 화면, 팻말 목록을 보여줍니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}지도, 외부 화면, 화물 흐름, 팻말 목록을 보여줍니다.
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}도시 메뉴를 표시합니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}도시 메뉴를 표시합니다.
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}보조금 메뉴를 표시합니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}보조금 메뉴를 표시합니다.
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}각 회사의 정거장 목록을 표시합니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}각 회사의 정거장 목록을 표시합니다.
|
||||||
@@ -355,9 +355,9 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}각 회
|
|||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}각 회사의 기본 정보를 표시합니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}각 회사의 기본 정보를 표시합니다.
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}스토리 북을 엽니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}스토리 북을 엽니다.
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}목표 목록을 보여줍니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}목표 목록을 보여줍니다.
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}그래프 메뉴를 표시합니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}회사 그래프와 화물 운송단가 비율 창을 보여줍니다
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}회사의 성취도 순위를 표시합니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}회사의 성취도 순위를 표시합니다.
|
||||||
STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}새 산업시설에 투자하거나 산업시설의 목록을 표시합니다.
|
STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}새 산업시설의 위치를 무작위로 찾거나 원하는 위치에 새로운 산업시설을 건설합니다
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}각 회사의 열차 목록을 표시합니다. CTRL+클릭하면 그룹화된 창은 일반 창으로, 일반 창은 그룹화된 창으로 표시됩니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}각 회사의 열차 목록을 표시합니다. CTRL+클릭하면 그룹화된 창은 일반 창으로, 일반 창은 그룹화된 창으로 표시됩니다.
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}각 회사의 차량 목록을 표시합니다. CTRL+클릭하면 그룹화된 창은 일반 창으로, 일반 창은 그룹화된 창으로 표시됩니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}각 회사의 차량 목록을 표시합니다. CTRL+클릭하면 그룹화된 창은 일반 창으로, 일반 창은 그룹화된 창으로 표시됩니다.
|
||||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}각 회사의 선박 목록을 표시합니다. CTRL+클릭하면 그룹화된 창은 일반 창으로, 일반 창은 그룹화된 창으로 표시됩니다.
|
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}각 회사의 선박 목록을 표시합니다. CTRL+클릭하면 그룹화된 창은 일반 창으로, 일반 창은 그룹화된 창으로 표시됩니다.
|
||||||
@@ -371,8 +371,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}항만
|
|||||||
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}항공 시설을 건설합니다.
|
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}항공 시설을 건설합니다.
|
||||||
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}땅 올리기/내리기, 나무 심기 등의 일를 하기 위한 지형편집창을 엽니다.
|
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}땅 올리기/내리기, 나무 심기 등의 일를 하기 위한 지형편집창을 엽니다.
|
||||||
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}효과음/배경 음악 창을 엽니다.
|
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}효과음/배경 음악 창을 엽니다.
|
||||||
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}최근 메시지/뉴스 기록이나 메시지 설정을 엽니다.
|
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}최근 메시지/뉴스 기록을 보거나, 모든 메시지를 삭제합니다
|
||||||
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}지역 정보, 콘솔, 스크립트 디버그, 스크린샷, OpenTTD에 대한 정보를 보여줍니다.
|
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}지역 정보, 스크린샷, OpenTTD에 대한 정보, 개발자 도구 등을 보여줍니다
|
||||||
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}툴바를 변경합니다.
|
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}툴바를 변경합니다.
|
||||||
|
|
||||||
# Extra tooltips for the scenario editor toolbar
|
# Extra tooltips for the scenario editor toolbar
|
||||||
@@ -1713,7 +1713,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :스크립트
|
|||||||
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
|
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SERVINT_ISPERCENT :신뢰도에 따른 점검 설정: {STRING}
|
STR_CONFIG_SETTING_SERVINT_ISPERCENT :신뢰도에 따른 점검 설정: {STRING}
|
||||||
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :차량 점검 방식을 "마지막 점검 이후 지난 시간 (또는) 최대 신뢰도에 대한 차량 신뢰도의 일정 퍼센트 하락 여부" 중에 하나로 선택합니다.
|
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :이 설정을 켜면, 차량의 신뢰도가 최대 신뢰도에 비해 일정 비율만큼 하락했을 때 점검을 하러 가려고 합니다.{}{}예를 들어, 차량의 최대 신뢰도가 90%이고 점검 주기를 20%로 설정하면, 그 차량은 신뢰도가 72%가 되었을 때 점검을 하러 가게 됩니다.
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SERVINT_TRAINS :열차에 대한 기본 점검 기준: {STRING}
|
STR_CONFIG_SETTING_SERVINT_TRAINS :열차에 대한 기본 점검 기준: {STRING}
|
||||||
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :열차에 따로 점검 기간이 설정되어있지 않은 경우에 사용할 기본 점검 기간을 설정합니다.
|
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :열차에 따로 점검 기간이 설정되어있지 않은 경우에 사용할 기본 점검 기간을 설정합니다.
|
||||||
@@ -1927,6 +1927,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :없음
|
|||||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :초기 대도시 크기 비율: 일반 도시보다 {STRING}배 크게 시작
|
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :초기 대도시 크기 비율: 일반 도시보다 {STRING}배 크게 시작
|
||||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :게임을 시작했을 때 일반 도시에 대한 대도시의 평균 크기를 설정합니다
|
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :게임을 시작했을 때 일반 도시에 대한 대도시의 평균 크기를 설정합니다
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :분배 그래프를 매 {STRING}초마다 업데이트
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :각 연결 그래프의 하위 시퀀스 재계산 사이의 시간입니다. 각 재계산은 그래프의 한 구성 요소에 대한 계획을 계산합니다. 즉, 이 설정을 X로 설정한다고 해서 전체 그래프를 X초마다 업데이트한다는 뜻은 아닙니다. 일부 구성 요소만 X초마다 업데이트됩니다. 이 값을 더 짧게 설정할 수록 계산하는데 더 많은 CPU 계산 시간이 필요합니다. 값을 더 길게 설정하면 화물 분배가 새 경로로 이뤄지기까지 더 오랜 시간이 걸리게 됩니다.
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :분배 그래프의 재계산을 위해 {STRING}초 사용
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :각 연결 그래프의 구성 요소를 재계산하는데 걸리는 시간입니다. 재계산이 시작되면, 이 시간(초) 동안 실행할 수 있는 스레드가 생성됩니다. 이 값을 더 짧게 설정할수록 스레드가 완료되어야 할 때 완료되지 못할 가능성이 높아집니다. 그러면 이를 완료하기 전까지는 게임이 멈추게 됩니다. 값을 더 길게 설정하면 경로가 변경되었을 때 분배가 업데이트되는 데 더 오래 걸립니다.
|
||||||
|
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :승객에 대한 분배 형식: {STRING}
|
STR_CONFIG_SETTING_DISTRIBUTION_PAX :승객에 대한 분배 형식: {STRING}
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"대칭"은 A역에서 B역으로 가려는 승객의 수가 B에서 A로 가려는 승객의 수와 비슷하다는 뜻입니다. "비대칭"은 승객이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 승객 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다.
|
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"대칭"은 A역에서 B역으로 가려는 승객의 수가 B에서 A로 가려는 승객의 수와 비슷하다는 뜻입니다. "비대칭"은 승객이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 승객 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다.
|
||||||
@@ -4589,6 +4593,7 @@ STR_AI_CONFIG_RANDOM_AI :무작위 인
|
|||||||
STR_AI_CONFIG_NONE :(없음)
|
STR_AI_CONFIG_NONE :(없음)
|
||||||
STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM}
|
STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM}
|
||||||
STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}최대 경쟁자수: {ORANGE}{COMMA}
|
STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}최대 경쟁자수: {ORANGE}{COMMA}
|
||||||
|
STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}새 경쟁사가 나타나기 위해 필요한 최소 시간: {ORANGE}{COMMA}분
|
||||||
|
|
||||||
STR_AI_CONFIG_MOVE_UP :{BLACK}위로 이동
|
STR_AI_CONFIG_MOVE_UP :{BLACK}위로 이동
|
||||||
STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}목록에서 선택한 인공지능의 순서를 한 칸 위로 옮깁니다
|
STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}목록에서 선택한 인공지능의 순서를 한 칸 위로 옮깁니다
|
||||||
@@ -5106,6 +5111,7 @@ STR_ERROR_NO_BUOY :{WHITE}부표
|
|||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}차량의 시간표를 정할 수 없습니다...
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}차량의 시간표를 정할 수 없습니다...
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}차량은 정거장에서만 기다릴 수 있습니다
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}차량은 정거장에서만 기다릴 수 있습니다
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}이 차량은 이 정거장에 서지 않습니다
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}이 차량은 이 정거장에 서지 않습니다
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... 시간표가 모두 작성되지 않았습니다
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... 팻말 수가 너무 많습니다
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... 팻말 수가 너무 많습니다
|
||||||
@@ -5602,7 +5608,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5472,7 +5472,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5588,7 +5588,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -6045,7 +6045,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5581,7 +5581,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -2240,7 +2240,7 @@ STR_JUST_RAW_STRING :{STRING}
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -4753,7 +4753,7 @@ STR_JUST_RAW_STRING :{STRING}
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -1739,7 +1739,7 @@ STR_JUST_RAW_STRING :{STRING}
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -2113,7 +2113,7 @@ STR_JUST_RAW_STRING :{STRING}
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5502,7 +5502,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -4990,7 +4990,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -4290,7 +4290,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -2092,7 +2092,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Ilość pamięc
|
|||||||
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
|
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SERVINT_ISPERCENT :Okres między serwisowaniami w procentach: {STRING}
|
STR_CONFIG_SETTING_SERVINT_ISPERCENT :Okres między serwisowaniami w procentach: {STRING}
|
||||||
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Wybierz, czy serwisowanie pojazdów odbywa się na podstawie czasu od ostatniego serwisu, czy sprawności malejącej o pewien procent maksymalnej sprawności
|
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kiedy włączone, pojazdy podejmują próbę serwisowania, gdy ich niezawodność spadnie o dany procent maksymalnej niezawodności.{}{}Na przykład, jeśli maksymalna niezawodność pojazdu wynosi 90%, a interwał serwisowy wynosi 20%, pojazd podejmie próbę serwisowania, gdy osiągnie 72% niezawodności.
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SERVINT_TRAINS :Domyślny interwał serwisowania pociągów: {STRING}
|
STR_CONFIG_SETTING_SERVINT_TRAINS :Domyślny interwał serwisowania pociągów: {STRING}
|
||||||
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Ustaw domyślny okres serwisowania dla nowych pojazdów kolejowych, jeśli takowy nie istnieje dla określonego pojazdu
|
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Ustaw domyślny okres serwisowania dla nowych pojazdów kolejowych, jeśli takowy nie istnieje dla określonego pojazdu
|
||||||
@@ -2306,6 +2306,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Żadne
|
|||||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Początkowy mnożnik rozmiarów metropolii: {STRING}
|
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Początkowy mnożnik rozmiarów metropolii: {STRING}
|
||||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Średni rozmiar metropolii w porównaniu do normalnych miast na początku gry
|
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Średni rozmiar metropolii w porównaniu do normalnych miast na początku gry
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Aktualizuj graf dystrybucji co {STRING}{NBSP}sekund{P 0:2 ę y ""}
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Czas pomiędzy kolejnymi przeliczeniami grafu połączeń. Każde przeliczenie oblicza plany dla jednego komponentu grafu. Wartość X dla tego ustawienia nie oznacza, że cały graf będzie aktualizowany co X sekund. Aktualizowane będą tylko niektóre komponenty. Im mniejszą wartość ustawisz, tym więcej czasu będzie potrzebował procesor, aby wykonać obliczenia. Im większą wartość ustawisz, tym więcej czasu upłynie, zanim rozpocznie się dystrybucja ładunków po nowych trasach.
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Przeznacz {STRING}{NBSP}sekund{P 0:2 ę y ""} na przeliczenie grafu dystrybucji
|
||||||
|
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Czas potrzebny na każde przeliczenie komponentu grafu połączeń. Po rozpoczęciu przeliczania, tworzony jest wątek, który może działać przez podaną liczbę sekund. Im mniejszą wartość ustawisz, tym większe prawdopodobieństwo, że wątek nie zostanie ukończony w wyznaczonym czasie. Wtedy gra zatrzymuje się do czasu jego zakończenia („lag”). Im większą wartość ustawisz, tym dłużej będzie trwała aktualizacja dystrybucji, gdy zmienią się trasy.
|
||||||
|
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Tryb dystrybucji dla pasażerów: {STRING}
|
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Tryb dystrybucji dla pasażerów: {STRING}
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Tryb „symetryczny” oznacza, że mniej więcej tyle samo pasażerów będzie podróżować ze stacji A do stacji B, co z B do A. Tryb „asymetryczny” oznacza, że w obu kierunkach może podróżować różna liczba pasażerów. Tryb „ręczny” oznacza, że dla pasażerów nie będzie przeprowadzana dystrybucja automatyczna.
|
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Tryb „symetryczny” oznacza, że mniej więcej tyle samo pasażerów będzie podróżować ze stacji A do stacji B, co z B do A. Tryb „asymetryczny” oznacza, że w obu kierunkach może podróżować różna liczba pasażerów. Tryb „ręczny” oznacza, że dla pasażerów nie będzie przeprowadzana dystrybucja automatyczna.
|
||||||
@@ -4974,6 +4978,7 @@ STR_AI_CONFIG_RANDOM_AI :Losowe SI
|
|||||||
STR_AI_CONFIG_NONE :(brak)
|
STR_AI_CONFIG_NONE :(brak)
|
||||||
STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM}
|
STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM}
|
||||||
STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maksymalna liczba przeciwników: {ORANGE}{COMMA}
|
STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maksymalna liczba przeciwników: {ORANGE}{COMMA}
|
||||||
|
STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Odstęp czasowy pomiędzy uruchamianiem rywali: {ORANGE}{COMMA} minut{P a y ""}
|
||||||
|
|
||||||
STR_AI_CONFIG_MOVE_UP :{BLACK}Przesuń w górę
|
STR_AI_CONFIG_MOVE_UP :{BLACK}Przesuń w górę
|
||||||
STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Przesuń wybraną SI w górę listy
|
STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Przesuń wybraną SI w górę listy
|
||||||
@@ -5491,6 +5496,7 @@ STR_ERROR_NO_BUOY :{WHITE}Brak boi
|
|||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Nie można wyznaczyć rozkładu jazdy pojazdu...
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Nie można wyznaczyć rozkładu jazdy pojazdu...
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Pojazdy mogą czekać tylko na stacjach
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Pojazdy mogą czekać tylko na stacjach
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Ten pojazd nie zatrzymuje się na tej stacji.
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Ten pojazd nie zatrzymuje się na tej stacji.
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... rozkład jazdy jest niekompletny
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... zbyt wiele napisów
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... zbyt wiele napisów
|
||||||
@@ -6024,7 +6030,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5111,6 +5111,7 @@ STR_ERROR_NO_BUOY :{WHITE}Não exi
|
|||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossível programar veículo...
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossível programar veículo...
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Veículos apenas podem esperar em estações.
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Veículos apenas podem esperar em estações.
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este veículo não pára nesta estação.
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este veículo não pára nesta estação.
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... horário incompleto
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... demasiados sinais
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... demasiados sinais
|
||||||
@@ -5607,7 +5608,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5594,7 +5594,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5297,6 +5297,7 @@ STR_ERROR_NO_BUOY :{WHITE}Буи
|
|||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не удалось составить график движения для этого транспорта...
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не удалось составить график движения для этого транспорта...
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Транспорт может ждать только на станции
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Транспорт может ждать только на станции
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Это транспортное средство не останавливается на этой станции
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Это транспортное средство не останавливается на этой станции
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... график движения неполный
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... слишком много табличек
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... слишком много табличек
|
||||||
@@ -5830,7 +5831,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5782,7 +5782,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5591,7 +5591,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5670,7 +5670,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5291,7 +5291,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5578,7 +5578,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5581,7 +5581,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5595,7 +5595,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5068,7 +5068,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5205,7 +5205,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5595,7 +5595,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -157,7 +157,7 @@ STR_ABBREV_COLA :{TINY_FONT}KO
|
|||||||
STR_ABBREV_CANDYFLOSS :{TINY_FONT}PŞ
|
STR_ABBREV_CANDYFLOSS :{TINY_FONT}PŞ
|
||||||
STR_ABBREV_BUBBLES :{TINY_FONT}BA
|
STR_ABBREV_BUBBLES :{TINY_FONT}BA
|
||||||
STR_ABBREV_TOFFEE :{TINY_FONT}ŞL
|
STR_ABBREV_TOFFEE :{TINY_FONT}ŞL
|
||||||
STR_ABBREV_BATTERIES :{TINY_FONT}PİL
|
STR_ABBREV_BATTERIES :{TINY_FONT}PL
|
||||||
STR_ABBREV_PLASTIC :{TINY_FONT}PL
|
STR_ABBREV_PLASTIC :{TINY_FONT}PL
|
||||||
STR_ABBREV_FIZZY_DRINKS :{TINY_FONT}İÇ
|
STR_ABBREV_FIZZY_DRINKS :{TINY_FONT}İÇ
|
||||||
STR_ABBREV_NONE :{TINY_FONT}YO
|
STR_ABBREV_NONE :{TINY_FONT}YO
|
||||||
@@ -5111,6 +5111,7 @@ STR_ERROR_NO_BUOY :{WHITE}Şamand
|
|||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Aracın zaman çizelgesi oluşturulamıyor...
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Aracın zaman çizelgesi oluşturulamıyor...
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Araçlar sadece istasyonlarda bekleyebilir
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Araçlar sadece istasyonlarda bekleyebilir
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Araç bu istasyonda durmuyor
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Araç bu istasyonda durmuyor
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... zaman çizelgesi eksik
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... çok fazla tabela var
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... çok fazla tabela var
|
||||||
@@ -5617,7 +5618,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5741,7 +5741,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -3180,7 +3180,7 @@ STR_JUST_RAW_STRING :{STRING}
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5110,6 +5110,7 @@ STR_ERROR_NO_BUOY :{WHITE}Không c
|
|||||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Không thể lập lịch trình cho phương tiện...
|
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Không thể lập lịch trình cho phương tiện...
|
||||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Phương tiện chỉ có thể chờ ở nhà ga, bến, cảng.
|
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Phương tiện chỉ có thể chờ ở nhà ga, bến, cảng.
|
||||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Phương tiện này không dừng lại tại ga, bến này theo lộ trình.
|
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Phương tiện này không dừng lại tại ga, bến này theo lộ trình.
|
||||||
|
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... lịch trình chưa hoàn thiện
|
||||||
|
|
||||||
# Sign related errors
|
# Sign related errors
|
||||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... quá nhiều biển hiệu
|
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... quá nhiều biển hiệu
|
||||||
@@ -5606,7 +5607,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -5114,7 +5114,7 @@ STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRI
|
|||||||
|
|
||||||
# Slightly 'raw' stringcodes with colour or size
|
# Slightly 'raw' stringcodes with colour or size
|
||||||
STR_BLACK_COMMA :{BLACK}{COMMA}
|
STR_BLACK_COMMA :{BLACK}{COMMA}
|
||||||
STR_TINY_BLACK_COMA :{TINY_FONT}{BLACK}{COMMA}
|
STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA}
|
||||||
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
STR_TINY_COMMA :{TINY_FONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
@@ -25,7 +25,7 @@ template <typename T> struct ArrayT;
|
|||||||
/** Helper template class that provides C array length and item type */
|
/** Helper template class that provides C array length and item type */
|
||||||
template <typename T, size_t N> struct ArrayT<T[N]> {
|
template <typename T, size_t N> struct ArrayT<T[N]> {
|
||||||
static const size_t length = N;
|
static const size_t length = N;
|
||||||
typedef T item_t;
|
using Item = T;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ template <typename T, size_t N> struct ArrayT<T[N]> {
|
|||||||
* or t_unk when index is out of bounds.
|
* or t_unk when index is out of bounds.
|
||||||
*/
|
*/
|
||||||
template <typename E, typename T>
|
template <typename E, typename T>
|
||||||
inline typename ArrayT<T>::item_t ItemAtT(E idx, const T &t, typename ArrayT<T>::item_t t_unk)
|
inline typename ArrayT<T>::Item ItemAtT(E idx, const T &t, typename ArrayT<T>::Item t_unk)
|
||||||
{
|
{
|
||||||
if ((size_t)idx >= ArrayT<T>::length) {
|
if ((size_t)idx >= ArrayT<T>::length) {
|
||||||
return t_unk;
|
return t_unk;
|
||||||
@@ -48,7 +48,7 @@ inline typename ArrayT<T>::item_t ItemAtT(E idx, const T &t, typename ArrayT<T>:
|
|||||||
* or t_unk when index is out of bounds.
|
* or t_unk when index is out of bounds.
|
||||||
*/
|
*/
|
||||||
template <typename E, typename T>
|
template <typename E, typename T>
|
||||||
inline typename ArrayT<T>::item_t ItemAtT(E idx, const T &t, typename ArrayT<T>::item_t t_unk, E idx_inv, typename ArrayT<T>::item_t t_inv)
|
inline typename ArrayT<T>::Item ItemAtT(E idx, const T &t, typename ArrayT<T>::Item t_unk, E idx_inv, typename ArrayT<T>::Item t_inv)
|
||||||
{
|
{
|
||||||
if ((size_t)idx < ArrayT<T>::length) {
|
if ((size_t)idx < ArrayT<T>::length) {
|
||||||
return t[idx];
|
return t[idx];
|
||||||
|
@@ -25,7 +25,7 @@
|
|||||||
* @return Pointer to string, caller is responsible for freeing memory,
|
* @return Pointer to string, caller is responsible for freeing memory,
|
||||||
* nullptr if entrynum does not exist.
|
* nullptr if entrynum does not exist.
|
||||||
*/
|
*/
|
||||||
char *GetMusicCatEntryName(const char *filename, size_t entrynum)
|
char *GetMusicCatEntryName(const std::string &filename, size_t entrynum)
|
||||||
{
|
{
|
||||||
if (!FioCheckFileExists(filename, BASESET_DIR)) return nullptr;
|
if (!FioCheckFileExists(filename, BASESET_DIR)) return nullptr;
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ char *GetMusicCatEntryName(const char *filename, size_t entrynum)
|
|||||||
* @return Pointer to buffer with data read, caller is responsible for freeind memory,
|
* @return Pointer to buffer with data read, caller is responsible for freeind memory,
|
||||||
* nullptr if entrynum does not exist.
|
* nullptr if entrynum does not exist.
|
||||||
*/
|
*/
|
||||||
byte *GetMusicCatEntryData(const char *filename, size_t entrynum, size_t &entrylen)
|
byte *GetMusicCatEntryData(const std::string &filename, size_t entrynum, size_t &entrylen)
|
||||||
{
|
{
|
||||||
entrylen = 0;
|
entrylen = 0;
|
||||||
if (!FioCheckFileExists(filename, BASESET_DIR)) return nullptr;
|
if (!FioCheckFileExists(filename, BASESET_DIR)) return nullptr;
|
||||||
@@ -116,7 +116,7 @@ template <class Tbase_set>
|
|||||||
return BaseMedia<Tbase_set>::used_set != nullptr;
|
return BaseMedia<Tbase_set>::used_set != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_filename)
|
bool MusicSet::FillSetDetails(IniFile *ini, const std::string &path, const std::string &full_filename)
|
||||||
{
|
{
|
||||||
bool ret = this->BaseSet<MusicSet, NUM_SONGS_AVAILABLE, false>::FillSetDetails(ini, path, full_filename);
|
bool ret = this->BaseSet<MusicSet, NUM_SONGS_AVAILABLE, false>::FillSetDetails(ini, path, full_filename);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@@ -126,8 +126,8 @@ bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_f
|
|||||||
IniGroup *timingtrim = ini->GetGroup("timingtrim");
|
IniGroup *timingtrim = ini->GetGroup("timingtrim");
|
||||||
uint tracknr = 1;
|
uint tracknr = 1;
|
||||||
for (uint i = 0; i < lengthof(this->songinfo); i++) {
|
for (uint i = 0; i < lengthof(this->songinfo); i++) {
|
||||||
const char *filename = this->files[i].filename;
|
const std::string &filename = this->files[i].filename;
|
||||||
if (names == nullptr || StrEmpty(filename) || this->files[i].check_result == MD5File::CR_NO_FILE) {
|
if (filename.empty() || this->files[i].check_result == MD5File::CR_NO_FILE) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_f
|
|||||||
this->songinfo[i].cat_index = atoi(item->value->c_str());
|
this->songinfo[i].cat_index = atoi(item->value->c_str());
|
||||||
char *songname = GetMusicCatEntryName(filename, this->songinfo[i].cat_index);
|
char *songname = GetMusicCatEntryName(filename, this->songinfo[i].cat_index);
|
||||||
if (songname == nullptr) {
|
if (songname == nullptr) {
|
||||||
DEBUG(grf, 0, "Base music set song missing from CAT file: %s/%d", filename, this->songinfo[i].cat_index);
|
DEBUG(grf, 0, "Base music set song missing from CAT file: %s/%d", filename.c_str(), this->songinfo[i].cat_index);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
this->songinfo[i].songname = songname;
|
this->songinfo[i].songname = songname;
|
||||||
@@ -149,7 +149,7 @@ bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_f
|
|||||||
this->songinfo[i].filetype = MTT_STANDARDMIDI;
|
this->songinfo[i].filetype = MTT_STANDARDMIDI;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *trimmed_filename = filename;
|
const char *trimmed_filename = filename.c_str();
|
||||||
/* As we possibly add a path to the filename and we compare
|
/* As we possibly add a path to the filename and we compare
|
||||||
* on the filename with the path as in the .obm, we need to
|
* on the filename with the path as in the .obm, we need to
|
||||||
* keep stripping path elements until we find a match. */
|
* keep stripping path elements until we find a match. */
|
||||||
@@ -166,7 +166,7 @@ bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_f
|
|||||||
if (item != nullptr && item->value.has_value() && !item->value->empty()) {
|
if (item != nullptr && item->value.has_value() && !item->value->empty()) {
|
||||||
this->songinfo[i].songname = item->value.value();
|
this->songinfo[i].songname = item->value.value();
|
||||||
} else {
|
} else {
|
||||||
DEBUG(grf, 0, "Base music set song name missing: %s", filename);
|
DEBUG(grf, 0, "Base music set song name missing: %s", filename.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -849,7 +849,7 @@ bool MidiFile::LoadSong(const MusicSongInfo &song)
|
|||||||
{
|
{
|
||||||
switch (song.filetype) {
|
switch (song.filetype) {
|
||||||
case MTT_STANDARDMIDI:
|
case MTT_STANDARDMIDI:
|
||||||
return this->LoadFile(song.filename);
|
return this->LoadFile(song.filename.c_str());
|
||||||
case MTT_MPSMIDI:
|
case MTT_MPSMIDI:
|
||||||
{
|
{
|
||||||
size_t songdatalen = 0;
|
size_t songdatalen = 0;
|
||||||
@@ -1060,9 +1060,9 @@ std::string MidiFile::GetSMFFile(const MusicSongInfo &song)
|
|||||||
|
|
||||||
char basename[MAX_PATH];
|
char basename[MAX_PATH];
|
||||||
{
|
{
|
||||||
const char *fnstart = strrchr(song.filename, PATHSEPCHAR);
|
const char *fnstart = strrchr(song.filename.c_str(), PATHSEPCHAR);
|
||||||
if (fnstart == nullptr) {
|
if (fnstart == nullptr) {
|
||||||
fnstart = song.filename;
|
fnstart = song.filename.c_str();
|
||||||
} else {
|
} else {
|
||||||
fnstart++;
|
fnstart++;
|
||||||
}
|
}
|
||||||
|
@@ -325,7 +325,6 @@ struct GameOptionsWindow : Window {
|
|||||||
case WID_GO_BASE_SFX_DROPDOWN: SetDParamStr(0, BaseSounds::GetUsedSet()->name); break;
|
case WID_GO_BASE_SFX_DROPDOWN: SetDParamStr(0, BaseSounds::GetUsedSet()->name); break;
|
||||||
case WID_GO_BASE_MUSIC_DROPDOWN: SetDParamStr(0, BaseMusic::GetUsedSet()->name); break;
|
case WID_GO_BASE_MUSIC_DROPDOWN: SetDParamStr(0, BaseMusic::GetUsedSet()->name); break;
|
||||||
case WID_GO_BASE_MUSIC_STATUS: SetDParam(0, BaseMusic::GetUsedSet()->GetNumInvalid()); break;
|
case WID_GO_BASE_MUSIC_STATUS: SetDParam(0, BaseMusic::GetUsedSet()->GetNumInvalid()); break;
|
||||||
case WID_GO_VIDEO_DRIVER_INFO: SetDParamStr(0, VideoDriver::GetInstance()->GetInfoString()); break;
|
|
||||||
case WID_GO_REFRESH_RATE_DROPDOWN: SetDParam(0, _settings_client.gui.refresh_rate); break;
|
case WID_GO_REFRESH_RATE_DROPDOWN: SetDParam(0, _settings_client.gui.refresh_rate); break;
|
||||||
case WID_GO_RESOLUTION_DROPDOWN: {
|
case WID_GO_RESOLUTION_DROPDOWN: {
|
||||||
auto current_resolution = GetCurrentResolutionIndex();
|
auto current_resolution = GetCurrentResolutionIndex();
|
||||||
@@ -364,6 +363,11 @@ struct GameOptionsWindow : Window {
|
|||||||
DrawSliderWidget(r, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE, this->gui_scale, _scale_labels);
|
DrawSliderWidget(r, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE, this->gui_scale, _scale_labels);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WID_GO_VIDEO_DRIVER_INFO:
|
||||||
|
SetDParamStr(0, VideoDriver::GetInstance()->GetInfoString());
|
||||||
|
DrawStringMultiLine(r, STR_GAME_OPTIONS_VIDEO_DRIVER_INFO);
|
||||||
|
break;
|
||||||
|
|
||||||
case WID_GO_BASE_SFX_VOLUME:
|
case WID_GO_BASE_SFX_VOLUME:
|
||||||
DrawSliderWidget(r, 0, INT8_MAX, _settings_client.music.effect_vol, {});
|
DrawSliderWidget(r, 0, INT8_MAX, _settings_client.music.effect_vol, {});
|
||||||
break;
|
break;
|
||||||
@@ -374,17 +378,45 @@ struct GameOptionsWindow : Window {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OnResize() override
|
||||||
|
{
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
|
NWidgetResizeBase *wid = this->GetWidget<NWidgetResizeBase>(WID_GO_BASE_GRF_DESCRIPTION);
|
||||||
|
int y = 0;
|
||||||
|
for (int i = 0; i < BaseGraphics::GetNumSets(); i++) {
|
||||||
|
SetDParamStr(0, BaseGraphics::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode()));
|
||||||
|
y = std::max(y, GetStringHeight(STR_BLACK_RAW_STRING, wid->current_x));
|
||||||
|
}
|
||||||
|
changed |= wid->UpdateVerticalSize(y);
|
||||||
|
|
||||||
|
wid = this->GetWidget<NWidgetResizeBase>(WID_GO_BASE_SFX_DESCRIPTION);
|
||||||
|
y = 0;
|
||||||
|
for (int i = 0; i < BaseSounds::GetNumSets(); i++) {
|
||||||
|
SetDParamStr(0, BaseSounds::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode()));
|
||||||
|
y = std::max(y, GetStringHeight(STR_BLACK_RAW_STRING, wid->current_x));
|
||||||
|
}
|
||||||
|
changed |= wid->UpdateVerticalSize(y);
|
||||||
|
|
||||||
|
wid = this->GetWidget<NWidgetResizeBase>(WID_GO_BASE_MUSIC_DESCRIPTION);
|
||||||
|
y = 0;
|
||||||
|
for (int i = 0; i < BaseMusic::GetNumSets(); i++) {
|
||||||
|
SetDParamStr(0, BaseMusic::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode()));
|
||||||
|
y = std::max(y, GetStringHeight(STR_BLACK_RAW_STRING, wid->current_x));
|
||||||
|
}
|
||||||
|
changed |= wid->UpdateVerticalSize(y);
|
||||||
|
|
||||||
|
wid = this->GetWidget<NWidgetResizeBase>(WID_GO_VIDEO_DRIVER_INFO);
|
||||||
|
SetDParamStr(0, VideoDriver::GetInstance()->GetInfoString());
|
||||||
|
y = GetStringHeight(STR_GAME_OPTIONS_VIDEO_DRIVER_INFO, wid->current_x);
|
||||||
|
changed |= wid->UpdateVerticalSize(y);
|
||||||
|
|
||||||
|
if (changed) this->ReInit(0, 0, true);
|
||||||
|
}
|
||||||
|
|
||||||
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
|
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
|
||||||
{
|
{
|
||||||
switch (widget) {
|
switch (widget) {
|
||||||
case WID_GO_BASE_GRF_DESCRIPTION:
|
|
||||||
/* Find the biggest description for the default size. */
|
|
||||||
for (int i = 0; i < BaseGraphics::GetNumSets(); i++) {
|
|
||||||
SetDParamStr(0, BaseGraphics::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode()));
|
|
||||||
size->height = std::max(size->height, (uint)GetStringHeight(STR_BLACK_RAW_STRING, size->width));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WID_GO_BASE_GRF_STATUS:
|
case WID_GO_BASE_GRF_STATUS:
|
||||||
/* Find the biggest description for the default size. */
|
/* Find the biggest description for the default size. */
|
||||||
for (int i = 0; i < BaseGraphics::GetNumSets(); i++) {
|
for (int i = 0; i < BaseGraphics::GetNumSets(); i++) {
|
||||||
@@ -396,22 +428,6 @@ struct GameOptionsWindow : Window {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WID_GO_BASE_SFX_DESCRIPTION:
|
|
||||||
/* Find the biggest description for the default size. */
|
|
||||||
for (int i = 0; i < BaseSounds::GetNumSets(); i++) {
|
|
||||||
SetDParamStr(0, BaseSounds::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode()));
|
|
||||||
size->height = std::max(size->height, (uint)GetStringHeight(STR_BLACK_RAW_STRING, size->width));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WID_GO_BASE_MUSIC_DESCRIPTION:
|
|
||||||
/* Find the biggest description for the default size. */
|
|
||||||
for (int i = 0; i < BaseMusic::GetNumSets(); i++) {
|
|
||||||
SetDParamStr(0, BaseMusic::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode()));
|
|
||||||
size->height = std::max(size->height, (uint)GetStringHeight(STR_BLACK_RAW_STRING, size->width));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WID_GO_BASE_MUSIC_STATUS:
|
case WID_GO_BASE_MUSIC_STATUS:
|
||||||
/* Find the biggest description for the default size. */
|
/* Find the biggest description for the default size. */
|
||||||
for (int i = 0; i < BaseMusic::GetNumSets(); i++) {
|
for (int i = 0; i < BaseMusic::GetNumSets(); i++) {
|
||||||
@@ -793,7 +809,7 @@ static const NWidgetPart _nested_game_options_widgets[] = {
|
|||||||
EndContainer(),
|
EndContainer(),
|
||||||
#endif
|
#endif
|
||||||
NWidget(NWID_HORIZONTAL),
|
NWidget(NWID_HORIZONTAL),
|
||||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_VIDEO_DRIVER_INFO), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_VIDEO_DRIVER_INFO, STR_NULL),
|
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GO_VIDEO_DRIVER_INFO), SetMinimalTextLines(1, 0), SetFill(1, 0),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
@@ -804,7 +820,7 @@ static const NWidgetPart _nested_game_options_widgets[] = {
|
|||||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_GRF_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_GRF_TOOLTIP),
|
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_GRF_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_GRF_TOOLTIP),
|
||||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_STATUS), SetMinimalSize(150, 12), SetDataTip(STR_EMPTY, STR_NULL), SetFill(1, 0),
|
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_STATUS), SetMinimalSize(150, 12), SetDataTip(STR_EMPTY, STR_NULL), SetFill(1, 0),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
|
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GO_BASE_GRF_DESCRIPTION), SetMinimalSize(330, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_NULL, STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
|
||||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
|
||||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
|
||||||
@@ -818,7 +834,7 @@ static const NWidgetPart _nested_game_options_widgets[] = {
|
|||||||
NWidget(NWID_SPACER), SetMinimalSize(150, 12), SetFill(1, 0),
|
NWidget(NWID_SPACER), SetMinimalSize(150, 12), SetFill(1, 0),
|
||||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_GO_BASE_SFX_VOLUME), SetMinimalSize(67, 12), SetFill(0, 0), SetDataTip(0x0, STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC),
|
NWidget(WWT_EMPTY, COLOUR_GREY, WID_GO_BASE_SFX_VOLUME), SetMinimalSize(67, 12), SetFill(0, 0), SetDataTip(0x0, STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_SFX_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
|
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GO_BASE_SFX_DESCRIPTION), SetMinimalSize(330, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_NULL, STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
|
||||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
|
||||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
|
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
|
||||||
@@ -833,7 +849,7 @@ static const NWidgetPart _nested_game_options_widgets[] = {
|
|||||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_GO_BASE_MUSIC_VOLUME), SetMinimalSize(67, 12), SetFill(0, 0), SetDataTip(0x0, STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC),
|
NWidget(WWT_EMPTY, COLOUR_GREY, WID_GO_BASE_MUSIC_VOLUME), SetMinimalSize(67, 12), SetFill(0, 0), SetDataTip(0x0, STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 7),
|
NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 7),
|
||||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_MUSIC_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
|
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GO_BASE_MUSIC_DESCRIPTION), SetMinimalSize(330, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_NULL, STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
|
||||||
NWidget(NWID_VERTICAL), SetPIP(0, 0, 0),
|
NWidget(NWID_VERTICAL), SetPIP(0, 0, 0),
|
||||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_JUKEBOX), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_MUSIC, STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW), SetPadding(6, 0, 6, 0),
|
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_JUKEBOX), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_MUSIC, STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW), SetPadding(6, 0, 6, 0),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
static SoundEntry _original_sounds[ORIGINAL_SAMPLE_COUNT];
|
static SoundEntry _original_sounds[ORIGINAL_SAMPLE_COUNT];
|
||||||
|
|
||||||
static void OpenBankFile(const char *filename)
|
static void OpenBankFile(const std::string &filename)
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The sound file for the original sounds, i.e. those not defined/overridden by a NewGRF.
|
* The sound file for the original sounds, i.e. those not defined/overridden by a NewGRF.
|
||||||
@@ -34,7 +34,7 @@ static void OpenBankFile(const char *filename)
|
|||||||
memset(_original_sounds, 0, sizeof(_original_sounds));
|
memset(_original_sounds, 0, sizeof(_original_sounds));
|
||||||
|
|
||||||
/* If there is no sound file (nosound set), don't load anything */
|
/* If there is no sound file (nosound set), don't load anything */
|
||||||
if (filename == nullptr) return;
|
if (filename.empty()) return;
|
||||||
|
|
||||||
original_sound_file.reset(new RandomAccessFile(filename, BASESET_DIR));
|
original_sound_file.reset(new RandomAccessFile(filename, BASESET_DIR));
|
||||||
size_t pos = original_sound_file->GetPos();
|
size_t pos = original_sound_file->GetPos();
|
||||||
@@ -50,7 +50,7 @@ static void OpenBankFile(const char *filename)
|
|||||||
/* Corrupt sample data? Just leave the allocated memory as those tell
|
/* Corrupt sample data? Just leave the allocated memory as those tell
|
||||||
* there is no sound to play (size = 0 due to calloc). Not allocating
|
* there is no sound to play (size = 0 due to calloc). Not allocating
|
||||||
* the memory disables valid NewGRFs that replace sounds. */
|
* the memory disables valid NewGRFs that replace sounds. */
|
||||||
DEBUG(sound, 6, "Incorrect number of sounds in '%s', ignoring.", filename);
|
DEBUG(sound, 6, "Incorrect number of sounds in '%s', ignoring.", filename.c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
128
src/tgp.cpp
128
src/tgp.cpp
@@ -151,17 +151,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/** Fixed point type for heights */
|
/** Fixed point type for heights */
|
||||||
typedef int16 height_t;
|
using Height = int16;
|
||||||
static const int height_decimal_bits = 4;
|
static const int height_decimal_bits = 4;
|
||||||
|
|
||||||
/** Fixed point array for amplitudes (and percent values) */
|
/** Fixed point array for amplitudes (and percent values) */
|
||||||
typedef int amplitude_t;
|
using Amplitude = int;
|
||||||
static const int amplitude_decimal_bits = 10;
|
static const int amplitude_decimal_bits = 10;
|
||||||
|
|
||||||
/** Height map - allocated array of heights (MapSizeX() + 1) x (MapSizeY() + 1) */
|
/** Height map - allocated array of heights (MapSizeX() + 1) x (MapSizeY() + 1) */
|
||||||
struct HeightMap
|
struct HeightMap
|
||||||
{
|
{
|
||||||
std::vector<height_t> h; //< array of heights
|
std::vector<Height> h; //< array of heights
|
||||||
/* Even though the sizes are always positive, there are many cases where
|
/* Even though the sizes are always positive, there are many cases where
|
||||||
* X and Y need to be signed integers due to subtractions. */
|
* X and Y need to be signed integers due to subtractions. */
|
||||||
int dim_x; //< height map size_x MapSizeX() + 1
|
int dim_x; //< height map size_x MapSizeX() + 1
|
||||||
@@ -174,7 +174,7 @@ struct HeightMap
|
|||||||
* @param y Y position
|
* @param y Y position
|
||||||
* @return height as fixed point number
|
* @return height as fixed point number
|
||||||
*/
|
*/
|
||||||
inline height_t &height(uint x, uint y)
|
inline Height &height(uint x, uint y)
|
||||||
{
|
{
|
||||||
return h[x + y * dim_x];
|
return h[x + y * dim_x];
|
||||||
}
|
}
|
||||||
@@ -183,24 +183,24 @@ struct HeightMap
|
|||||||
/** Global height map instance */
|
/** Global height map instance */
|
||||||
static HeightMap _height_map = { {}, 0, 0, 0 };
|
static HeightMap _height_map = { {}, 0, 0, 0 };
|
||||||
|
|
||||||
/** Conversion: int to height_t */
|
/** Conversion: int to Height */
|
||||||
#define I2H(i) ((i) << height_decimal_bits)
|
#define I2H(i) ((i) << height_decimal_bits)
|
||||||
/** Conversion: height_t to int */
|
/** Conversion: Height to int */
|
||||||
#define H2I(i) ((i) >> height_decimal_bits)
|
#define H2I(i) ((i) >> height_decimal_bits)
|
||||||
|
|
||||||
/** Conversion: int to amplitude_t */
|
/** Conversion: int to Amplitude */
|
||||||
#define I2A(i) ((i) << amplitude_decimal_bits)
|
#define I2A(i) ((i) << amplitude_decimal_bits)
|
||||||
/** Conversion: amplitude_t to int */
|
/** Conversion: Amplitude to int */
|
||||||
#define A2I(i) ((i) >> amplitude_decimal_bits)
|
#define A2I(i) ((i) >> amplitude_decimal_bits)
|
||||||
|
|
||||||
/** Conversion: amplitude_t to height_t */
|
/** Conversion: Amplitude to Height */
|
||||||
#define A2H(a) ((a) >> (amplitude_decimal_bits - height_decimal_bits))
|
#define A2H(a) ((a) >> (amplitude_decimal_bits - height_decimal_bits))
|
||||||
|
|
||||||
/** Maximum number of TGP noise frequencies. */
|
/** Maximum number of TGP noise frequencies. */
|
||||||
static const int MAX_TGP_FREQUENCIES = 10;
|
static const int MAX_TGP_FREQUENCIES = 10;
|
||||||
|
|
||||||
/** Desired water percentage (100% == 1024) - indexed by _settings_game.difficulty.quantity_sea_lakes */
|
/** Desired water percentage (100% == 1024) - indexed by _settings_game.difficulty.quantity_sea_lakes */
|
||||||
static const amplitude_t _water_percent[4] = {70, 170, 270, 420};
|
static const Amplitude _water_percent[4] = {70, 170, 270, 420};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the maximum allowed height while generating a map based on
|
* Gets the maximum allowed height while generating a map based on
|
||||||
@@ -208,7 +208,7 @@ static const amplitude_t _water_percent[4] = {70, 170, 270, 420};
|
|||||||
* @return The maximum height for the map generation.
|
* @return The maximum height for the map generation.
|
||||||
* @note Values should never be lower than 3 since the minimum snowline height is 2.
|
* @note Values should never be lower than 3 since the minimum snowline height is 2.
|
||||||
*/
|
*/
|
||||||
static height_t TGPGetMaxHeight()
|
static Height TGPGetMaxHeight()
|
||||||
{
|
{
|
||||||
if (_settings_game.difficulty.terrain_type == CUSTOM_TERRAIN_TYPE_NUMBER_DIFFICULTY) {
|
if (_settings_game.difficulty.terrain_type == CUSTOM_TERRAIN_TYPE_NUMBER_DIFFICULTY) {
|
||||||
/* TGP never reaches this height; this means that if a user inputs "2",
|
/* TGP never reaches this height; this means that if a user inputs "2",
|
||||||
@@ -262,10 +262,10 @@ uint GetEstimationTGPMapHeight()
|
|||||||
* @param frequency The frequency to get the amplitudes for
|
* @param frequency The frequency to get the amplitudes for
|
||||||
* @return The amplitudes to apply to the map.
|
* @return The amplitudes to apply to the map.
|
||||||
*/
|
*/
|
||||||
static amplitude_t GetAmplitude(int frequency)
|
static Amplitude GetAmplitude(int frequency)
|
||||||
{
|
{
|
||||||
/* Base noise amplitudes (multiplied by 1024) and indexed by "smoothness setting" and log2(frequency). */
|
/* Base noise amplitudes (multiplied by 1024) and indexed by "smoothness setting" and log2(frequency). */
|
||||||
static const amplitude_t amplitudes[][7] = {
|
static const Amplitude amplitudes[][7] = {
|
||||||
/* lowest frequency ...... highest (every corner) */
|
/* lowest frequency ...... highest (every corner) */
|
||||||
{16000, 5600, 1968, 688, 240, 16, 16}, ///< Very smooth
|
{16000, 5600, 1968, 688, 240, 16, 16}, ///< Very smooth
|
||||||
{24000, 12800, 6400, 2700, 1024, 128, 16}, ///< Smooth
|
{24000, 12800, 6400, 2700, 1024, 128, 16}, ///< Smooth
|
||||||
@@ -288,14 +288,14 @@ static amplitude_t GetAmplitude(int frequency)
|
|||||||
|
|
||||||
/* Get the table index, and return that value if possible. */
|
/* Get the table index, and return that value if possible. */
|
||||||
int index = frequency - MAX_TGP_FREQUENCIES + lengthof(amplitudes[smoothness]);
|
int index = frequency - MAX_TGP_FREQUENCIES + lengthof(amplitudes[smoothness]);
|
||||||
amplitude_t amplitude = amplitudes[smoothness][std::max(0, index)];
|
Amplitude amplitude = amplitudes[smoothness][std::max(0, index)];
|
||||||
if (index >= 0) return amplitude;
|
if (index >= 0) return amplitude;
|
||||||
|
|
||||||
/* We need to extrapolate the amplitude. */
|
/* We need to extrapolate the amplitude. */
|
||||||
double extrapolation_factor = extrapolation_factors[smoothness];
|
double extrapolation_factor = extrapolation_factors[smoothness];
|
||||||
int height_range = I2H(16);
|
int height_range = I2H(16);
|
||||||
do {
|
do {
|
||||||
amplitude = (amplitude_t)(extrapolation_factor * (double)amplitude);
|
amplitude = (Amplitude)(extrapolation_factor * (double)amplitude);
|
||||||
height_range <<= 1;
|
height_range <<= 1;
|
||||||
index++;
|
index++;
|
||||||
} while (index < 0);
|
} while (index < 0);
|
||||||
@@ -345,7 +345,7 @@ static inline void FreeHeightMap()
|
|||||||
* @param rMax Limit of result
|
* @param rMax Limit of result
|
||||||
* @return generated height
|
* @return generated height
|
||||||
*/
|
*/
|
||||||
static inline height_t RandomHeight(amplitude_t rMax)
|
static inline Height RandomHeight(Amplitude rMax)
|
||||||
{
|
{
|
||||||
/* Spread height into range -rMax..+rMax */
|
/* Spread height into range -rMax..+rMax */
|
||||||
return A2H(RandomRange(2 * rMax + 1) - rMax);
|
return A2H(RandomRange(2 * rMax + 1) - rMax);
|
||||||
@@ -367,7 +367,7 @@ static void HeightMapGenerate()
|
|||||||
bool first = true;
|
bool first = true;
|
||||||
|
|
||||||
for (int frequency = start; frequency < MAX_TGP_FREQUENCIES; frequency++) {
|
for (int frequency = start; frequency < MAX_TGP_FREQUENCIES; frequency++) {
|
||||||
const amplitude_t amplitude = GetAmplitude(frequency);
|
const Amplitude amplitude = GetAmplitude(frequency);
|
||||||
|
|
||||||
/* Ignore zero amplitudes; it means our map isn't height enough for this
|
/* Ignore zero amplitudes; it means our map isn't height enough for this
|
||||||
* amplitude, so ignore it and continue with the next set of amplitude. */
|
* amplitude, so ignore it and continue with the next set of amplitude. */
|
||||||
@@ -379,7 +379,7 @@ static void HeightMapGenerate()
|
|||||||
/* This is first round, we need to establish base heights with step = size_min */
|
/* This is first round, we need to establish base heights with step = size_min */
|
||||||
for (int y = 0; y <= _height_map.size_y; y += step) {
|
for (int y = 0; y <= _height_map.size_y; y += step) {
|
||||||
for (int x = 0; x <= _height_map.size_x; x += step) {
|
for (int x = 0; x <= _height_map.size_x; x += step) {
|
||||||
height_t height = (amplitude > 0) ? RandomHeight(amplitude) : 0;
|
Height height = (amplitude > 0) ? RandomHeight(amplitude) : 0;
|
||||||
_height_map.height(x, y) = height;
|
_height_map.height(x, y) = height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -391,9 +391,9 @@ static void HeightMapGenerate()
|
|||||||
* Interpolate height values at odd x, even y tiles */
|
* Interpolate height values at odd x, even y tiles */
|
||||||
for (int y = 0; y <= _height_map.size_y; y += 2 * step) {
|
for (int y = 0; y <= _height_map.size_y; y += 2 * step) {
|
||||||
for (int x = 0; x <= _height_map.size_x - 2 * step; x += 2 * step) {
|
for (int x = 0; x <= _height_map.size_x - 2 * step; x += 2 * step) {
|
||||||
height_t h00 = _height_map.height(x + 0 * step, y);
|
Height h00 = _height_map.height(x + 0 * step, y);
|
||||||
height_t h02 = _height_map.height(x + 2 * step, y);
|
Height h02 = _height_map.height(x + 2 * step, y);
|
||||||
height_t h01 = (h00 + h02) / 2;
|
Height h01 = (h00 + h02) / 2;
|
||||||
_height_map.height(x + 1 * step, y) = h01;
|
_height_map.height(x + 1 * step, y) = h01;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -401,9 +401,9 @@ static void HeightMapGenerate()
|
|||||||
/* Interpolate height values at odd y tiles */
|
/* Interpolate height values at odd y tiles */
|
||||||
for (int y = 0; y <= _height_map.size_y - 2 * step; y += 2 * step) {
|
for (int y = 0; y <= _height_map.size_y - 2 * step; y += 2 * step) {
|
||||||
for (int x = 0; x <= _height_map.size_x; x += step) {
|
for (int x = 0; x <= _height_map.size_x; x += step) {
|
||||||
height_t h00 = _height_map.height(x, y + 0 * step);
|
Height h00 = _height_map.height(x, y + 0 * step);
|
||||||
height_t h20 = _height_map.height(x, y + 2 * step);
|
Height h20 = _height_map.height(x, y + 2 * step);
|
||||||
height_t h10 = (h00 + h20) / 2;
|
Height h10 = (h00 + h20) / 2;
|
||||||
_height_map.height(x, y + 1 * step) = h10;
|
_height_map.height(x, y + 1 * step) = h10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -418,21 +418,21 @@ static void HeightMapGenerate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Returns min, max and average height from height map */
|
/** Returns min, max and average height from height map */
|
||||||
static void HeightMapGetMinMaxAvg(height_t *min_ptr, height_t *max_ptr, height_t *avg_ptr)
|
static void HeightMapGetMinMaxAvg(Height *min_ptr, Height *max_ptr, Height *avg_ptr)
|
||||||
{
|
{
|
||||||
height_t h_min, h_max, h_avg;
|
Height h_min, h_max, h_avg;
|
||||||
int64 h_accu = 0;
|
int64 h_accu = 0;
|
||||||
h_min = h_max = _height_map.height(0, 0);
|
h_min = h_max = _height_map.height(0, 0);
|
||||||
|
|
||||||
/* Get h_min, h_max and accumulate heights into h_accu */
|
/* Get h_min, h_max and accumulate heights into h_accu */
|
||||||
for (const height_t &h : _height_map.h) {
|
for (const Height &h : _height_map.h) {
|
||||||
if (h < h_min) h_min = h;
|
if (h < h_min) h_min = h;
|
||||||
if (h > h_max) h_max = h;
|
if (h > h_max) h_max = h;
|
||||||
h_accu += h;
|
h_accu += h;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get average height */
|
/* Get average height */
|
||||||
h_avg = (height_t)(h_accu / (_height_map.size_x * _height_map.size_y));
|
h_avg = (Height)(h_accu / (_height_map.size_x * _height_map.size_y));
|
||||||
|
|
||||||
/* Return required results */
|
/* Return required results */
|
||||||
if (min_ptr != nullptr) *min_ptr = h_min;
|
if (min_ptr != nullptr) *min_ptr = h_min;
|
||||||
@@ -441,12 +441,12 @@ static void HeightMapGetMinMaxAvg(height_t *min_ptr, height_t *max_ptr, height_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Dill histogram and return pointer to its base point - to the count of zero heights */
|
/** Dill histogram and return pointer to its base point - to the count of zero heights */
|
||||||
static int *HeightMapMakeHistogram(height_t h_min, height_t h_max, int *hist_buf)
|
static int *HeightMapMakeHistogram(Height h_min, Height h_max, int *hist_buf)
|
||||||
{
|
{
|
||||||
int *hist = hist_buf - h_min;
|
int *hist = hist_buf - h_min;
|
||||||
|
|
||||||
/* Count the heights and fill the histogram */
|
/* Count the heights and fill the histogram */
|
||||||
for (const height_t &h : _height_map.h){
|
for (const Height &h : _height_map.h){
|
||||||
assert(h >= h_min);
|
assert(h >= h_min);
|
||||||
assert(h <= h_max);
|
assert(h <= h_max);
|
||||||
hist[h]++;
|
hist[h]++;
|
||||||
@@ -455,9 +455,9 @@ static int *HeightMapMakeHistogram(height_t h_min, height_t h_max, int *hist_buf
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Applies sine wave redistribution onto height map */
|
/** Applies sine wave redistribution onto height map */
|
||||||
static void HeightMapSineTransform(height_t h_min, height_t h_max)
|
static void HeightMapSineTransform(Height h_min, Height h_max)
|
||||||
{
|
{
|
||||||
for (height_t &h : _height_map.h) {
|
for (Height &h : _height_map.h) {
|
||||||
double fheight;
|
double fheight;
|
||||||
|
|
||||||
if (h < h_min) continue;
|
if (h < h_min) continue;
|
||||||
@@ -523,7 +523,7 @@ static void HeightMapSineTransform(height_t h_min, height_t h_max)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* Transform it back into h_min..h_max space */
|
/* Transform it back into h_min..h_max space */
|
||||||
h = (height_t)(fheight * (h_max - h_min) + h_min);
|
h = (Height)(fheight * (h_max - h_min) + h_min);
|
||||||
if (h < 0) h = I2H(0);
|
if (h < 0) h = I2H(0);
|
||||||
if (h >= h_max) h = h_max - 1;
|
if (h >= h_max) h = h_max - 1;
|
||||||
}
|
}
|
||||||
@@ -547,34 +547,34 @@ static void HeightMapSineTransform(height_t h_min, height_t h_max)
|
|||||||
*/
|
*/
|
||||||
static void HeightMapCurves(uint level)
|
static void HeightMapCurves(uint level)
|
||||||
{
|
{
|
||||||
height_t mh = TGPGetMaxHeight() - I2H(1); // height levels above sea level only
|
Height mh = TGPGetMaxHeight() - I2H(1); // height levels above sea level only
|
||||||
|
|
||||||
/** Basically scale height X to height Y. Everything in between is interpolated. */
|
/** Basically scale height X to height Y. Everything in between is interpolated. */
|
||||||
struct control_point_t {
|
struct ControlPoint {
|
||||||
height_t x; ///< The height to scale from.
|
Height x; ///< The height to scale from.
|
||||||
height_t y; ///< The height to scale to.
|
Height y; ///< The height to scale to.
|
||||||
};
|
};
|
||||||
/* Scaled curve maps; value is in height_ts. */
|
/* Scaled curve maps; value is in height_ts. */
|
||||||
#define F(fraction) ((height_t)(fraction * mh))
|
#define F(fraction) ((Height)(fraction * mh))
|
||||||
const control_point_t curve_map_1[] = { { F(0.0), F(0.0) }, { F(0.8), F(0.13) }, { F(1.0), F(0.4) } };
|
const ControlPoint curve_map_1[] = { { F(0.0), F(0.0) }, { F(0.8), F(0.13) }, { F(1.0), F(0.4) } };
|
||||||
const control_point_t curve_map_2[] = { { F(0.0), F(0.0) }, { F(0.53), F(0.13) }, { F(0.8), F(0.27) }, { F(1.0), F(0.6) } };
|
const ControlPoint curve_map_2[] = { { F(0.0), F(0.0) }, { F(0.53), F(0.13) }, { F(0.8), F(0.27) }, { F(1.0), F(0.6) } };
|
||||||
const control_point_t curve_map_3[] = { { F(0.0), F(0.0) }, { F(0.53), F(0.27) }, { F(0.8), F(0.57) }, { F(1.0), F(0.8) } };
|
const ControlPoint curve_map_3[] = { { F(0.0), F(0.0) }, { F(0.53), F(0.27) }, { F(0.8), F(0.57) }, { F(1.0), F(0.8) } };
|
||||||
const control_point_t curve_map_4[] = { { F(0.0), F(0.0) }, { F(0.4), F(0.3) }, { F(0.7), F(0.8) }, { F(0.92), F(0.99) }, { F(1.0), F(0.99) } };
|
const ControlPoint curve_map_4[] = { { F(0.0), F(0.0) }, { F(0.4), F(0.3) }, { F(0.7), F(0.8) }, { F(0.92), F(0.99) }, { F(1.0), F(0.99) } };
|
||||||
#undef F
|
#undef F
|
||||||
|
|
||||||
/** Helper structure to index the different curve maps. */
|
/** Helper structure to index the different curve maps. */
|
||||||
struct control_point_list_t {
|
struct ControlPointList {
|
||||||
size_t length; ///< The length of the curve map.
|
size_t length; ///< The length of the curve map.
|
||||||
const control_point_t *list; ///< The actual curve map.
|
const ControlPoint *list; ///< The actual curve map.
|
||||||
};
|
};
|
||||||
const control_point_list_t curve_maps[] = {
|
static const ControlPointList curve_maps[] = {
|
||||||
{ lengthof(curve_map_1), curve_map_1 },
|
{ lengthof(curve_map_1), curve_map_1 },
|
||||||
{ lengthof(curve_map_2), curve_map_2 },
|
{ lengthof(curve_map_2), curve_map_2 },
|
||||||
{ lengthof(curve_map_3), curve_map_3 },
|
{ lengthof(curve_map_3), curve_map_3 },
|
||||||
{ lengthof(curve_map_4), curve_map_4 },
|
{ lengthof(curve_map_4), curve_map_4 },
|
||||||
};
|
};
|
||||||
|
|
||||||
height_t ht[lengthof(curve_maps)];
|
Height ht[lengthof(curve_maps)];
|
||||||
MemSetT(ht, 0, lengthof(ht));
|
MemSetT(ht, 0, lengthof(ht));
|
||||||
|
|
||||||
/* Set up a grid to choose curve maps based on location; attempt to get a somewhat square grid */
|
/* Set up a grid to choose curve maps based on location; attempt to get a somewhat square grid */
|
||||||
@@ -635,7 +635,7 @@ static void HeightMapCurves(uint level)
|
|||||||
corner_bits |= 1 << corner_c;
|
corner_bits |= 1 << corner_c;
|
||||||
corner_bits |= 1 << corner_d;
|
corner_bits |= 1 << corner_d;
|
||||||
|
|
||||||
height_t *h = &_height_map.height(x, y);
|
Height *h = &_height_map.height(x, y);
|
||||||
|
|
||||||
/* Do not touch sea level */
|
/* Do not touch sea level */
|
||||||
if (*h < I2H(1)) continue;
|
if (*h < I2H(1)) continue;
|
||||||
@@ -648,10 +648,10 @@ static void HeightMapCurves(uint level)
|
|||||||
if (!HasBit(corner_bits, t)) continue;
|
if (!HasBit(corner_bits, t)) continue;
|
||||||
|
|
||||||
[[maybe_unused]] bool found = false;
|
[[maybe_unused]] bool found = false;
|
||||||
const control_point_t *cm = curve_maps[t].list;
|
const ControlPoint *cm = curve_maps[t].list;
|
||||||
for (uint i = 0; i < curve_maps[t].length - 1; i++) {
|
for (uint i = 0; i < curve_maps[t].length - 1; i++) {
|
||||||
const control_point_t &p1 = cm[i];
|
const ControlPoint &p1 = cm[i];
|
||||||
const control_point_t &p2 = cm[i + 1];
|
const ControlPoint &p2 = cm[i + 1];
|
||||||
|
|
||||||
if (*h >= p1.x && *h < p2.x) {
|
if (*h >= p1.x && *h < p2.x) {
|
||||||
ht[t] = p1.y + (*h - p1.x) * (p2.y - p1.y) / (p2.x - p1.x);
|
ht[t] = p1.y + (*h - p1.x) * (p2.y - p1.y) / (p2.x - p1.x);
|
||||||
@@ -665,7 +665,7 @@ static void HeightMapCurves(uint level)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Apply interpolation of curve map results. */
|
/* Apply interpolation of curve map results. */
|
||||||
*h = (height_t)((ht[corner_a] * yri + ht[corner_b] * yr) * xri + (ht[corner_c] * yri + ht[corner_d] * yr) * xr);
|
*h = (Height)((ht[corner_a] * yri + ht[corner_b] * yr) * xri + (ht[corner_c] * yri + ht[corner_d] * yr) * xr);
|
||||||
|
|
||||||
/* Readd sea level */
|
/* Readd sea level */
|
||||||
*h += I2H(1);
|
*h += I2H(1);
|
||||||
@@ -674,9 +674,9 @@ static void HeightMapCurves(uint level)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Adjusts heights in height map to contain required amount of water tiles */
|
/** Adjusts heights in height map to contain required amount of water tiles */
|
||||||
static void HeightMapAdjustWaterLevel(amplitude_t water_percent, height_t h_max_new)
|
static void HeightMapAdjustWaterLevel(Amplitude water_percent, Height h_max_new)
|
||||||
{
|
{
|
||||||
height_t h_min, h_max, h_avg, h_water_level;
|
Height h_min, h_max, h_avg, h_water_level;
|
||||||
int64 water_tiles, desired_water_tiles;
|
int64 water_tiles, desired_water_tiles;
|
||||||
int *hist;
|
int *hist;
|
||||||
|
|
||||||
@@ -702,9 +702,9 @@ static void HeightMapAdjustWaterLevel(amplitude_t water_percent, height_t h_max_
|
|||||||
* values from range: h_water_level..h_max are transformed into 0..h_max_new
|
* values from range: h_water_level..h_max are transformed into 0..h_max_new
|
||||||
* where h_max_new is depending on terrain type and map size.
|
* where h_max_new is depending on terrain type and map size.
|
||||||
*/
|
*/
|
||||||
for (height_t &h : _height_map.h) {
|
for (Height &h : _height_map.h) {
|
||||||
/* Transform height from range h_water_level..h_max into 0..h_max_new range */
|
/* Transform height from range h_water_level..h_max into 0..h_max_new range */
|
||||||
h = (height_t)(((int)h_max_new) * (h - h_water_level) / (h_max - h_water_level)) + I2H(1);
|
h = (Height)(((int)h_max_new) * (h - h_water_level) / (h_max - h_water_level)) + I2H(1);
|
||||||
/* Make sure all values are in the proper range (0..h_max_new) */
|
/* Make sure all values are in the proper range (0..h_max_new) */
|
||||||
if (h < 0) h = I2H(0);
|
if (h < 0) h = I2H(0);
|
||||||
if (h >= h_max_new) h = h_max_new - 1;
|
if (h >= h_max_new) h = h_max_new - 1;
|
||||||
@@ -800,8 +800,8 @@ static void HeightMapSmoothCoastInDirection(int org_x, int org_y, int dir_x, int
|
|||||||
int ed; // coast distance from edge
|
int ed; // coast distance from edge
|
||||||
int depth;
|
int depth;
|
||||||
|
|
||||||
height_t h_prev = I2H(1);
|
Height h_prev = I2H(1);
|
||||||
height_t h;
|
Height h;
|
||||||
|
|
||||||
assert(IsValidXY(org_x, org_y));
|
assert(IsValidXY(org_x, org_y));
|
||||||
|
|
||||||
@@ -850,17 +850,17 @@ static void HeightMapSmoothCoasts(uint8 water_borders)
|
|||||||
* the most it can change is one level. When OTTD can support cliffs, this
|
* the most it can change is one level. When OTTD can support cliffs, this
|
||||||
* routine may not be necessary.
|
* routine may not be necessary.
|
||||||
*/
|
*/
|
||||||
static void HeightMapSmoothSlopes(height_t dh_max)
|
static void HeightMapSmoothSlopes(Height dh_max)
|
||||||
{
|
{
|
||||||
for (int y = 0; y <= (int)_height_map.size_y; y++) {
|
for (int y = 0; y <= (int)_height_map.size_y; y++) {
|
||||||
for (int x = 0; x <= (int)_height_map.size_x; x++) {
|
for (int x = 0; x <= (int)_height_map.size_x; x++) {
|
||||||
height_t h_max = std::min(_height_map.height(x > 0 ? x - 1 : x, y), _height_map.height(x, y > 0 ? y - 1 : y)) + dh_max;
|
Height h_max = std::min(_height_map.height(x > 0 ? x - 1 : x, y), _height_map.height(x, y > 0 ? y - 1 : y)) + dh_max;
|
||||||
if (_height_map.height(x, y) > h_max) _height_map.height(x, y) = h_max;
|
if (_height_map.height(x, y) > h_max) _height_map.height(x, y) = h_max;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int y = _height_map.size_y; y >= 0; y--) {
|
for (int y = _height_map.size_y; y >= 0; y--) {
|
||||||
for (int x = _height_map.size_x; x >= 0; x--) {
|
for (int x = _height_map.size_x; x >= 0; x--) {
|
||||||
height_t h_max = std::min(_height_map.height(x < _height_map.size_x ? x + 1 : x, y), _height_map.height(x, y < _height_map.size_y ? y + 1 : y)) + dh_max;
|
Height h_max = std::min(_height_map.height(x < _height_map.size_x ? x + 1 : x, y), _height_map.height(x, y < _height_map.size_y ? y + 1 : y)) + dh_max;
|
||||||
if (_height_map.height(x, y) > h_max) _height_map.height(x, y) = h_max;
|
if (_height_map.height(x, y) > h_max) _height_map.height(x, y) = h_max;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -876,9 +876,9 @@ static void HeightMapSmoothSlopes(height_t dh_max)
|
|||||||
static void HeightMapNormalize()
|
static void HeightMapNormalize()
|
||||||
{
|
{
|
||||||
int sea_level_setting = _settings_game.difficulty.quantity_sea_lakes;
|
int sea_level_setting = _settings_game.difficulty.quantity_sea_lakes;
|
||||||
const amplitude_t water_percent = sea_level_setting != (int)CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY ? _water_percent[sea_level_setting] : _settings_game.game_creation.custom_sea_level * 1024 / 100;
|
const Amplitude water_percent = sea_level_setting != (int)CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY ? _water_percent[sea_level_setting] : _settings_game.game_creation.custom_sea_level * 1024 / 100;
|
||||||
const height_t h_max_new = TGPGetMaxHeight();
|
const Height h_max_new = TGPGetMaxHeight();
|
||||||
const height_t roughness = 7 + 3 * _settings_game.game_creation.tgen_smoothness;
|
const Height roughness = 7 + 3 * _settings_game.game_creation.tgen_smoothness;
|
||||||
|
|
||||||
HeightMapAdjustWaterLevel(water_percent, h_max_new);
|
HeightMapAdjustWaterLevel(water_percent, h_max_new);
|
||||||
|
|
||||||
|
@@ -1133,6 +1133,18 @@ void NWidgetResizeBase::SetResize(uint resize_x, uint resize_y)
|
|||||||
this->resize_y = resize_y;
|
this->resize_y = resize_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set absolute (post-scaling) minimal size of the widget.
|
||||||
|
* @param min_y Vertical minimal size of the widget.
|
||||||
|
* @return true iff the widget minimum size has changed.
|
||||||
|
*/
|
||||||
|
bool NWidgetResizeBase::UpdateVerticalSize(uint min_y)
|
||||||
|
{
|
||||||
|
if (min_y == this->min_y) return false;
|
||||||
|
this->min_y = min_y;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void NWidgetResizeBase::AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl)
|
void NWidgetResizeBase::AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl)
|
||||||
{
|
{
|
||||||
this->StoreSizePosition(sizing, x, y, given_width, given_height);
|
this->StoreSizePosition(sizing, x, y, given_width, given_height);
|
||||||
|
@@ -283,6 +283,8 @@ public:
|
|||||||
void SetFill(uint fill_x, uint fill_y);
|
void SetFill(uint fill_x, uint fill_y);
|
||||||
void SetResize(uint resize_x, uint resize_y);
|
void SetResize(uint resize_x, uint resize_y);
|
||||||
|
|
||||||
|
bool UpdateVerticalSize(uint min_y);
|
||||||
|
|
||||||
void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override;
|
void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override;
|
||||||
|
|
||||||
uint min_x; ///< Minimal horizontal size of only this widget.
|
uint min_x; ///< Minimal horizontal size of only this widget.
|
||||||
|
@@ -1028,9 +1028,10 @@ void Window::SetDirtyAsBlocks()
|
|||||||
* Re-initialize a window, and optionally change its size.
|
* Re-initialize a window, and optionally change its size.
|
||||||
* @param rx Horizontal resize of the window.
|
* @param rx Horizontal resize of the window.
|
||||||
* @param ry Vertical resize of the window.
|
* @param ry Vertical resize of the window.
|
||||||
|
* @param reposition If set, reposition the window to default location.
|
||||||
* @note For just resizing the window, use #ResizeWindow instead.
|
* @note For just resizing the window, use #ResizeWindow instead.
|
||||||
*/
|
*/
|
||||||
void Window::ReInit(int rx, int ry)
|
void Window::ReInit(int rx, int ry, bool reposition)
|
||||||
{
|
{
|
||||||
this->SetDirtyAsBlocks(); // Mark whole current window as dirty.
|
this->SetDirtyAsBlocks(); // Mark whole current window as dirty.
|
||||||
|
|
||||||
@@ -1057,6 +1058,12 @@ void Window::ReInit(int rx, int ry)
|
|||||||
if (this->resize.step_width > 1) dx -= dx % (int)this->resize.step_width;
|
if (this->resize.step_width > 1) dx -= dx % (int)this->resize.step_width;
|
||||||
if (this->resize.step_height > 1) dy -= dy % (int)this->resize.step_height;
|
if (this->resize.step_height > 1) dy -= dy % (int)this->resize.step_height;
|
||||||
|
|
||||||
|
if (reposition) {
|
||||||
|
Point pt = this->OnInitialPosition(this->nested_root->smallest_x, this->nested_root->smallest_y, window_number);
|
||||||
|
this->InitializePositionSize(pt.x, pt.y, this->nested_root->smallest_x, this->nested_root->smallest_y);
|
||||||
|
this->FindWindowPlacementAndResize(this->window_desc->GetDefaultWidth(), this->window_desc->GetDefaultHeight());
|
||||||
|
}
|
||||||
|
|
||||||
ResizeWindow(this, dx, dy);
|
ResizeWindow(this, dx, dy);
|
||||||
/* ResizeWindow() does this->SetDirty() already, no need to do it again here. */
|
/* ResizeWindow() does this->SetDirty() already, no need to do it again here. */
|
||||||
}
|
}
|
||||||
|
@@ -521,7 +521,7 @@ public:
|
|||||||
|
|
||||||
void SetDirty();
|
void SetDirty();
|
||||||
void SetDirtyAsBlocks();
|
void SetDirtyAsBlocks();
|
||||||
void ReInit(int rx = 0, int ry = 0);
|
void ReInit(int rx = 0, int ry = 0, bool reposition = false);
|
||||||
|
|
||||||
/** Is window shaded currently? */
|
/** Is window shaded currently? */
|
||||||
inline bool IsShaded() const
|
inline bool IsShaded() const
|
||||||
|
Reference in New Issue
Block a user