mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-10-31 15:20:10 +00:00
Merge branch 'master' into jgrpp
# Conflicts: # src/blitter/32bpp_anim.cpp # src/blitter/8bpp_optimized.cpp # src/gfx.cpp # src/gfx_func.h # src/gfxinit.cpp # src/network/core/os_abstraction.cpp # src/spritecache.cpp
This commit is contained in:
commit
b72366419b
Binary file not shown.
@ -1 +1 @@
|
||||
3e860a0e880e3dc90615facf5f455fc6
|
||||
5fdc049a7a0ada4c280239f15bc38174
|
||||
|
@ -10,6 +10,7 @@ if(GRFCODEC_FOUND)
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/rapids.nfo
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/temperate.nfo
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/toyland.nfo
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/toyland_rapids.nfo
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/tropic.nfo
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/airports_orig_extra.nfo
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/canals_extra.nfo
|
||||
@ -24,6 +25,8 @@ if(GRFCODEC_FOUND)
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/rapids_shading.png
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/temperate.png
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/toyland.png
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/toyland_rapids.png
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/toyland_rapids_shading.png
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/tropic_desert.png
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rivers/tropic_forest.png
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/fix_graphics.png
|
||||
|
@ -79,6 +79,7 @@
|
||||
#include "airports_orig_extra.nfo"
|
||||
#include "canals_extra.nfo"
|
||||
#include "rivers/rapids.nfo"
|
||||
#include "rivers/toyland_rapids.nfo"
|
||||
#include "rivers/temperate.nfo"
|
||||
#include "rivers/arctic.nfo"
|
||||
#include "rivers/tropic.nfo"
|
||||
|
@ -3,7 +3,7 @@
|
||||
// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
-1 * 0 0C "Toyland river graphics by andythenorth (Andrew Parkhouse)"
|
||||
-1 * 0 0C "Toyland river graphics by zephyris (Richard Wheeler)"
|
||||
-1 * 4 01 05 01 3C
|
||||
-1 sprites/toyland.png 8bpp 10 10 38 19 -5 0 normal
|
||||
-1 sprites/toyland.png 8bpp 58 10 38 18 -5 13 normal
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 34 KiB |
73
media/baseset/orig_extra/rivers/toyland_rapids.nfo
Normal file
73
media/baseset/orig_extra/rivers/toyland_rapids.nfo
Normal file
@ -0,0 +1,73 @@
|
||||
// This file is part of OpenTTD.
|
||||
// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
-1 * 0 0C "Toyland rapid graphics by zephyris (Richard Wheeler)"
|
||||
-1 * 4 01 05 01 04
|
||||
-1 sprites/toyland_rapids.png 8bpp 10 10 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 10 10 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids.png mask 10 10
|
||||
-1 sprites/toyland_rapids.png 8bpp 90 10 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 90 10 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids.png mask 90 10
|
||||
-1 sprites/toyland_rapids.png 8bpp 170 10 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 170 10 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids.png mask 170 10
|
||||
-1 sprites/toyland_rapids.png 8bpp 250 10 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 250 10 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids.png mask 250 10
|
||||
-1 * 7 02 05 00 01 00 00 00
|
||||
|
||||
-1 * 4 01 05 01 04
|
||||
-1 sprites/toyland_rapids.png 8bpp 10 60 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 10 60 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids.png mask 10 60
|
||||
-1 sprites/toyland_rapids.png 8bpp 90 60 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 90 60 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids.png mask 90 60
|
||||
-1 sprites/toyland_rapids.png 8bpp 170 60 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 170 60 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids.png mask 170 60
|
||||
-1 sprites/toyland_rapids.png 8bpp 250 60 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 250 60 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids.png mask 250 60
|
||||
-1 * 7 02 05 01 01 00 00 00
|
||||
|
||||
-1 * 4 01 05 01 04
|
||||
-1 sprites/toyland_rapids.png 8bpp 10 110 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 10 110 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids.png mask 10 110
|
||||
-1 sprites/toyland_rapids.png 8bpp 90 110 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 90 110 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids.png mask 90 110
|
||||
-1 sprites/toyland_rapids.png 8bpp 170 110 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 170 110 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids.png mask 170 110
|
||||
-1 sprites/toyland_rapids.png 8bpp 250 110 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 250 110 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids.png mask 250 110
|
||||
-1 * 7 02 05 02 01 00 00 00
|
||||
|
||||
-1 * 4 01 05 01 04
|
||||
-1 sprites/toyland_rapids.png 8bpp 10 160 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 10 160 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids.png mask 10 160
|
||||
-1 sprites/toyland_rapids.png 8bpp 90 160 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 90 160 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids.png mask 90 160
|
||||
-1 sprites/toyland_rapids.png 8bpp 170 160 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 170 160 64 23 -31 0 normal
|
||||
| sprites/toyland_rapids.png mask 170 160
|
||||
-1 sprites/toyland_rapids.png 8bpp 250 160 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids_shading.png 32bpp 250 160 64 39 -31 -8 normal
|
||||
| sprites/toyland_rapids.png mask 250 160
|
||||
-1 * 7 02 05 03 01 00 00 00
|
||||
|
||||
-1 * 39 02 05 10 80 00 01 04
|
||||
00 00
|
||||
01 00
|
||||
02 00
|
||||
03 00
|
||||
-1 * 6 07 83 01 \7! 03 01
|
||||
-1 * 7 03 05 01 05 00 10 00
|
BIN
media/baseset/orig_extra/rivers/toyland_rapids.png
Normal file
BIN
media/baseset/orig_extra/rivers/toyland_rapids.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
BIN
media/baseset/orig_extra/rivers/toyland_rapids_shading.png
Normal file
BIN
media/baseset/orig_extra/rivers/toyland_rapids_shading.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
2
src/3rdparty/squirrel/sqstdlib/sqstdmath.cpp
vendored
2
src/3rdparty/squirrel/sqstdlib/sqstdmath.cpp
vendored
@ -84,7 +84,7 @@ static SQRegFunction mathlib_funcs[] = {
|
||||
_DECL_FUNC(exp,2,".n"),
|
||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||
_DECL_FUNC(srand,2,".n"),
|
||||
_DECL_FUNC(rand,1,NULL),
|
||||
_DECL_FUNC(rand,1,nullptr),
|
||||
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
|
||||
_DECL_FUNC(fabs,2,".n"),
|
||||
_DECL_FUNC(abs,2,".n"),
|
||||
|
52
src/3rdparty/squirrel/sqstdlib/sqstdrex.cpp
vendored
52
src/3rdparty/squirrel/sqstdlib/sqstdrex.cpp
vendored
@ -378,8 +378,8 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
|
||||
SQRexNodeType type = node->type;
|
||||
switch(type) {
|
||||
case OP_GREEDY: {
|
||||
//SQRexNode *greedystop = (node->next != -1) ? &exp->_nodes[node->next] : NULL;
|
||||
SQRexNode *greedystop = NULL;
|
||||
//SQRexNode *greedystop = (node->next != -1) ? &exp->_nodes[node->next] : nullptr;
|
||||
SQRexNode *greedystop = nullptr;
|
||||
SQInteger p0 = (node->right >> 16)&0x0000FFFF, p1 = node->right&0x0000FFFF, nmaches = 0;
|
||||
const SQChar *s=str, *good = str;
|
||||
|
||||
@ -403,7 +403,7 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
|
||||
if(greedystop->type != OP_GREEDY ||
|
||||
(greedystop->type == OP_GREEDY && ((greedystop->right >> 16)&0x0000FFFF) != 0))
|
||||
{
|
||||
SQRexNode *gnext = NULL;
|
||||
SQRexNode *gnext = nullptr;
|
||||
if(greedystop->next != -1) {
|
||||
gnext = &exp->_nodes[greedystop->next];
|
||||
}else if(next && next->next != -1){
|
||||
@ -425,12 +425,12 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
|
||||
if(p0 == p1 && p0 == nmaches) return good;
|
||||
else if(nmaches >= p0 && p1 == 0xFFFF) return good;
|
||||
else if(nmaches >= p0 && nmaches <= p1) return good;
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
case OP_OR: {
|
||||
const SQChar *asd = str;
|
||||
SQRexNode *temp=&exp->_nodes[node->left];
|
||||
while( (asd = sqstd_rex_matchnode(exp,temp,asd,NULL)) ) {
|
||||
while( (asd = sqstd_rex_matchnode(exp,temp,asd,nullptr)) ) {
|
||||
if(temp->next != -1)
|
||||
temp = &exp->_nodes[temp->next];
|
||||
else
|
||||
@ -438,13 +438,13 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
|
||||
}
|
||||
asd = str;
|
||||
temp = &exp->_nodes[node->right];
|
||||
while( (asd = sqstd_rex_matchnode(exp,temp,asd,NULL)) ) {
|
||||
while( (asd = sqstd_rex_matchnode(exp,temp,asd,nullptr)) ) {
|
||||
if(temp->next != -1)
|
||||
temp = &exp->_nodes[temp->next];
|
||||
else
|
||||
return asd;
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
break;
|
||||
}
|
||||
case OP_EXPR:
|
||||
@ -459,7 +459,7 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
|
||||
}
|
||||
|
||||
do {
|
||||
SQRexNode *subnext = NULL;
|
||||
SQRexNode *subnext = nullptr;
|
||||
if(n->next != -1) {
|
||||
subnext = &exp->_nodes[n->next];
|
||||
}else {
|
||||
@ -470,7 +470,7 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
|
||||
exp->_matches[capture].begin = 0;
|
||||
exp->_matches[capture].len = 0;
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
} while((n->next != -1) && (n = &exp->_nodes[n->next]));
|
||||
|
||||
@ -483,15 +483,15 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
|
||||
|| (str == exp->_eol && !isspace(*(str-1)))
|
||||
|| (!isspace(*str) && isspace(*(str+1)))
|
||||
|| (isspace(*str) && !isspace(*(str+1))) ) {
|
||||
return (node->left == 'b')?str:NULL;
|
||||
return (node->left == 'b')?str:nullptr;
|
||||
}
|
||||
return (node->left == 'b')?NULL:str;
|
||||
return (node->left == 'b')?nullptr:str;
|
||||
case OP_BOL:
|
||||
if(str == exp->_bol) return str;
|
||||
return NULL;
|
||||
return nullptr;
|
||||
case OP_EOL:
|
||||
if(str == exp->_eol) return str;
|
||||
return NULL;
|
||||
return nullptr;
|
||||
case OP_DOT:{
|
||||
*str++;
|
||||
}
|
||||
@ -502,26 +502,26 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
|
||||
*str++;
|
||||
return str;
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
case OP_CCLASS:
|
||||
if(sqstd_rex_matchcclass(node->left,*str)) {
|
||||
*str++;
|
||||
return str;
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
default: /* char */
|
||||
if(*str != (SQChar)node->type) return NULL;
|
||||
if(*str != (SQChar)node->type) return nullptr;
|
||||
*str++;
|
||||
return str;
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/* public api */
|
||||
SQRex *sqstd_rex_compile(const SQChar *pattern,const SQChar **error)
|
||||
{
|
||||
SQRex *exp = (SQRex *)sq_malloc(sizeof(SQRex));
|
||||
exp->_eol = exp->_bol = NULL;
|
||||
exp->_eol = exp->_bol = nullptr;
|
||||
exp->_p = pattern;
|
||||
exp->_nallocated = (SQInteger)strlen(pattern) * sizeof(SQChar);
|
||||
exp->_nodes = (SQRexNode *)sq_malloc(exp->_nallocated * sizeof(SQRexNode));
|
||||
@ -558,7 +558,7 @@ SQRex *sqstd_rex_compile(const SQChar *pattern,const SQChar **error)
|
||||
}
|
||||
catch (...) {
|
||||
sqstd_rex_free(exp);
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
return exp;
|
||||
}
|
||||
@ -574,19 +574,19 @@ void sqstd_rex_free(SQRex *exp)
|
||||
|
||||
SQBool sqstd_rex_match(SQRex* exp,const SQChar* text)
|
||||
{
|
||||
const SQChar* res = NULL;
|
||||
const SQChar* res = nullptr;
|
||||
exp->_bol = text;
|
||||
exp->_eol = text + strlen(text);
|
||||
exp->_currsubexp = 0;
|
||||
res = sqstd_rex_matchnode(exp,exp->_nodes,text,NULL);
|
||||
if(res == NULL || res != exp->_eol)
|
||||
res = sqstd_rex_matchnode(exp,exp->_nodes,text,nullptr);
|
||||
if(res == nullptr || res != exp->_eol)
|
||||
return SQFalse;
|
||||
return SQTrue;
|
||||
}
|
||||
|
||||
SQBool sqstd_rex_searchrange(SQRex* exp,const SQChar* text_begin,const SQChar* text_end,const SQChar** out_begin, const SQChar** out_end)
|
||||
{
|
||||
const SQChar *cur = NULL;
|
||||
const SQChar *cur = nullptr;
|
||||
SQInteger node = exp->_first;
|
||||
if(text_begin >= text_end) return SQFalse;
|
||||
exp->_bol = text_begin;
|
||||
@ -595,15 +595,15 @@ SQBool sqstd_rex_searchrange(SQRex* exp,const SQChar* text_begin,const SQChar* t
|
||||
cur = text_begin;
|
||||
while(node != -1) {
|
||||
exp->_currsubexp = 0;
|
||||
cur = sqstd_rex_matchnode(exp,&exp->_nodes[node],cur,NULL);
|
||||
cur = sqstd_rex_matchnode(exp,&exp->_nodes[node],cur,nullptr);
|
||||
if(!cur)
|
||||
break;
|
||||
node = exp->_nodes[node].next;
|
||||
}
|
||||
*text_begin++;
|
||||
} while(cur == NULL && text_begin != text_end);
|
||||
} while(cur == nullptr && text_begin != text_end);
|
||||
|
||||
if(cur == NULL)
|
||||
if(cur == nullptr)
|
||||
return SQFalse;
|
||||
|
||||
--text_begin;
|
||||
|
@ -112,16 +112,16 @@ static SQInteger _string_split(HSQUIRRELVM v)
|
||||
memcpy(stemp,str,memsize);
|
||||
tok = scstrtok(stemp,seps);
|
||||
sq_newarray(v,0);
|
||||
while( tok != NULL ) {
|
||||
while( tok != nullptr ) {
|
||||
sq_pushstring(v,tok,-1);
|
||||
sq_arrayappend(v,-2);
|
||||
tok = scstrtok( NULL, seps );
|
||||
tok = scstrtok( nullptr, seps );
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define SETUP_REX(v) \
|
||||
SQRex *self = NULL; \
|
||||
SQRex *self = nullptr; \
|
||||
sq_getinstanceup(v,1,(SQUserPointer *)&self,0);
|
||||
|
||||
static SQInteger _rexobj_releasehook(SQUserPointer p, SQInteger size)
|
||||
|
22
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
22
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
@ -100,7 +100,7 @@ static SQInteger base_getstackinfos(HSQUIRRELVM v)
|
||||
SQInteger level;
|
||||
SQStackInfos si;
|
||||
SQInteger seq = 0;
|
||||
const SQChar *name = NULL;
|
||||
const SQChar *name = nullptr;
|
||||
sq_getinteger(v, -1, &level);
|
||||
if (SQ_SUCCEEDED(sq_stackinfos(v, level, &si)))
|
||||
{
|
||||
@ -179,7 +179,7 @@ static SQInteger base_print(HSQUIRRELVM v)
|
||||
static SQInteger base_compilestring(HSQUIRRELVM v)
|
||||
{
|
||||
SQInteger nargs=sq_gettop(v);
|
||||
const SQChar *src=NULL,*name="unnamedbuffer";
|
||||
const SQChar *src=nullptr,*name="unnamedbuffer";
|
||||
SQInteger size;
|
||||
sq_getstring(v,2,&src);
|
||||
size=sq_getsize(v,2);
|
||||
@ -238,26 +238,26 @@ static SQInteger base_type(HSQUIRRELVM v)
|
||||
static SQRegFunction base_funcs[]={
|
||||
//generic
|
||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||
{"seterrorhandler",base_seterrorhandler,2, NULL},
|
||||
{"setdebughook",base_setdebughook,2, NULL},
|
||||
{"enabledebuginfo",base_enabledebuginfo,2, NULL},
|
||||
{"seterrorhandler",base_seterrorhandler,2, nullptr},
|
||||
{"setdebughook",base_setdebughook,2, nullptr},
|
||||
{"enabledebuginfo",base_enabledebuginfo,2, nullptr},
|
||||
{"getstackinfos",base_getstackinfos,2, ".n"},
|
||||
{"getroottable",base_getroottable,1, NULL},
|
||||
{"setroottable",base_setroottable,2, NULL},
|
||||
{"getconsttable",base_getconsttable,1, NULL},
|
||||
{"setconsttable",base_setconsttable,2, NULL},
|
||||
{"getroottable",base_getroottable,1, nullptr},
|
||||
{"setroottable",base_setroottable,2, nullptr},
|
||||
{"getconsttable",base_getconsttable,1, nullptr},
|
||||
{"setconsttable",base_setconsttable,2, nullptr},
|
||||
#endif
|
||||
{"assert",base_assert,2, nullptr},
|
||||
{"print",base_print,2, nullptr},
|
||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||
{"compilestring",base_compilestring,-2, ".ss"},
|
||||
{"newthread",base_newthread,2, ".c"},
|
||||
{"suspend",base_suspend,-1, NULL},
|
||||
{"suspend",base_suspend,-1, nullptr},
|
||||
#endif
|
||||
{"array",base_array,-2, ".n"},
|
||||
{"type",base_type,2, nullptr},
|
||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||
{"dummy",base_dummy,0,NULL},
|
||||
{"dummy",base_dummy,0,nullptr},
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
{"collectgarbage",base_collectgarbage,1, "t"},
|
||||
#endif
|
||||
|
4
src/3rdparty/squirrel/squirrel/sqobject.h
vendored
4
src/3rdparty/squirrel/squirrel/sqobject.h
vendored
@ -136,7 +136,7 @@ struct SQObjectPtr;
|
||||
(obj)->_uiRef--; \
|
||||
if((obj)->_uiRef == 0) \
|
||||
(obj)->Release(); \
|
||||
(obj) = NULL; \
|
||||
(obj) = nullptr; \
|
||||
} \
|
||||
}
|
||||
|
||||
@ -446,7 +446,7 @@ public:
|
||||
#define ADD_TO_CHAIN(chain,obj) AddToChain(chain,obj)
|
||||
#define REMOVE_FROM_CHAIN(chain,obj) {if(!(_uiRef&MARK_FLAG))RemoveFromChain(chain,obj);}
|
||||
#define CHAINABLE_OBJ SQCollectable
|
||||
#define INIT_CHAIN() {_next=NULL;_prev=NULL;_sharedstate=ss;}
|
||||
#define INIT_CHAIN() {_next=nullptr;_prev=nullptr;_sharedstate=ss;}
|
||||
#else
|
||||
|
||||
#define ADD_TO_CHAIN(chain,obj) ((void)0)
|
||||
|
2
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
2
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
@ -201,7 +201,7 @@ SQSharedState::~SQSharedState()
|
||||
t = nx;
|
||||
}
|
||||
}
|
||||
// assert(_gc_chain==NULL); //just to proove a theory
|
||||
// assert(_gc_chain==nullptr); //just to proove a theory
|
||||
while(_gc_chain){
|
||||
_gc_chain->_uiRef--;
|
||||
_gc_chain->Release();
|
||||
|
4
src/3rdparty/squirrel/squirrel/sqvm.h
vendored
4
src/3rdparty/squirrel/squirrel/sqvm.h
vendored
@ -194,7 +194,7 @@ inline SQObjectPtr &stack_get(HSQUIRRELVM v,SQInteger idx){return ((idx>=0)?(v->
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
#define _opt_ss(_vm_) (_vm_)->_sharedstate
|
||||
#else
|
||||
#define _opt_ss(_vm_) NULL
|
||||
#define _opt_ss(_vm_) nullptr
|
||||
#endif
|
||||
|
||||
#define PUSH_CALLINFO(v,nci){ \
|
||||
@ -218,6 +218,6 @@ inline SQObjectPtr &stack_get(HSQUIRRELVM v,SQInteger idx){return ((idx>=0)?(v->
|
||||
if(v->_callsstacksize) \
|
||||
v->ci = &v->_callsstack[v->_callsstacksize-1] ; \
|
||||
else \
|
||||
v->ci = NULL; \
|
||||
v->ci = nullptr; \
|
||||
}
|
||||
#endif //_SQVM_H_
|
||||
|
@ -345,6 +345,8 @@ add_files(
|
||||
order_gui.cpp
|
||||
order_type.h
|
||||
osk_gui.cpp
|
||||
palette.cpp
|
||||
palette_func.h
|
||||
pbs.cpp
|
||||
pbs.h
|
||||
plans.cpp
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
#include "../stdafx.h"
|
||||
#include "../video/video_driver.hpp"
|
||||
#include "../palette_func.h"
|
||||
#include "../zoom_func.h"
|
||||
#include "32bpp_anim.hpp"
|
||||
#include "common.hpp"
|
||||
@ -220,10 +221,6 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT:
|
||||
/* TODO -- We make an assumption here that the remap in fact is transparency, not some colour.
|
||||
* This is never a problem with the code we produce, but newgrfs can make it fail... or at least:
|
||||
* we produce a result the newgrf maker didn't expect ;) */
|
||||
|
||||
/* Make the current colour a bit more black, so it looks like this image is transparent */
|
||||
src_n += n;
|
||||
if (src_px->a == 255) {
|
||||
@ -245,6 +242,24 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT_REMAP:
|
||||
/* Apply custom transparency remap. */
|
||||
src_n += n;
|
||||
if (src_px->a != 0) {
|
||||
src_px += n;
|
||||
do {
|
||||
*dst = this->LookupColourInPalette(remap[GetNearestColourIndex(*dst)]);
|
||||
*anim = 0;
|
||||
anim++;
|
||||
dst++;
|
||||
} while (--n != 0);
|
||||
} else {
|
||||
dst += n;
|
||||
anim += n;
|
||||
src_px += n;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if (fast_path || (src_px->a == 255 && (sprite_flags & BSF_NO_ANIM))) {
|
||||
do {
|
||||
@ -343,6 +358,7 @@ void Blitter_32bppAnim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomL
|
||||
return;
|
||||
|
||||
case BM_TRANSPARENT: Draw<BM_TRANSPARENT, false> (bp, zoom); return;
|
||||
case BM_TRANSPARENT_REMAP: Draw<BM_TRANSPARENT_REMAP, false> (bp, zoom); return;
|
||||
case BM_CRASH_REMAP: Draw<BM_CRASH_REMAP, false> (bp, zoom); return;
|
||||
case BM_BLACK_REMAP: Draw<BM_BLACK_REMAP, false> (bp, zoom); return;
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "../stdafx.h"
|
||||
#include "../video/video_driver.hpp"
|
||||
#include "../table/sprites.h"
|
||||
#include "../palette_func.h"
|
||||
#include "32bpp_anim_sse4.hpp"
|
||||
#include "32bpp_sse_func.hpp"
|
||||
|
||||
@ -317,6 +318,21 @@ bmcr_alpha_blend_single:
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT_REMAP:
|
||||
/* Apply custom transparency remap. */
|
||||
for (uint x = (uint) bp->width; x > 0; x--) {
|
||||
if (src->a != 0) {
|
||||
*dst = this->LookupColourInPalette(remap[GetNearestColourIndex(*dst)]);
|
||||
*anim = 0;
|
||||
}
|
||||
src_mv++;
|
||||
dst++;
|
||||
src++;
|
||||
anim++;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case BM_CRASH_REMAP:
|
||||
for (uint x = (uint) bp->width; x > 0; x--) {
|
||||
if (src_mv->m == 0) {
|
||||
@ -420,7 +436,7 @@ bmcr_alpha_blend_single_brightness:
|
||||
}
|
||||
|
||||
next_line:
|
||||
if (mode != BM_TRANSPARENT) src_mv_line += si->sprite_width;
|
||||
if (mode != BM_TRANSPARENT && mode != BM_TRANSPARENT_REMAP) src_mv_line += si->sprite_width;
|
||||
src_rgba_line = (const Colour*) ((const byte*) src_rgba_line + si->sprite_line_size);
|
||||
dst_line += bp->pitch;
|
||||
anim_line += this->anim_buf_pitch;
|
||||
@ -483,6 +499,7 @@ bm_normal:
|
||||
}
|
||||
break;
|
||||
case BM_TRANSPARENT: Draw<BM_TRANSPARENT, RM_NONE, BT_NONE, true, true>(bp, zoom); return;
|
||||
case BM_TRANSPARENT_REMAP: Draw<BM_TRANSPARENT_REMAP, RM_NONE, BT_NONE, true, true>(bp, zoom); return;
|
||||
case BM_CRASH_REMAP: Draw<BM_CRASH_REMAP, RM_NONE, BT_NONE, true, true>(bp, zoom); return;
|
||||
case BM_BLACK_REMAP: Draw<BM_BLACK_REMAP, RM_NONE, BT_NONE, true, true>(bp, zoom); return;
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "../stdafx.h"
|
||||
#include "../zoom_func.h"
|
||||
#include "../settings_type.h"
|
||||
#include "../palette_func.h"
|
||||
#include "32bpp_optimized.hpp"
|
||||
#include "common.hpp"
|
||||
|
||||
@ -189,10 +190,6 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT:
|
||||
/* TODO -- We make an assumption here that the remap in fact is transparency, not some colour.
|
||||
* This is never a problem with the code we produce, but newgrfs can make it fail... or at least:
|
||||
* we produce a result the newgrf maker didn't expect ;) */
|
||||
|
||||
/* Make the current colour a bit more black, so it looks like this image is transparent */
|
||||
src_n += n;
|
||||
if (src_px->a == 255) {
|
||||
@ -210,6 +207,21 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT_REMAP:
|
||||
/* Apply custom transparency remap. */
|
||||
src_n += n;
|
||||
if (src_px->a != 0) {
|
||||
src_px += n;
|
||||
do {
|
||||
*dst = this->LookupColourInPalette(remap[GetNearestColourIndex(*dst)]);
|
||||
dst++;
|
||||
} while (--n != 0);
|
||||
} else {
|
||||
dst += n;
|
||||
src_px += n;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if (src_px->a == 255) {
|
||||
/* faster than memcpy(), n is usually low */
|
||||
@ -260,6 +272,7 @@ void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode,
|
||||
case BM_NORMAL: Draw<BM_NORMAL, Tpal_to_rgb>(bp, zoom); return;
|
||||
case BM_COLOUR_REMAP: Draw<BM_COLOUR_REMAP, Tpal_to_rgb>(bp, zoom); return;
|
||||
case BM_TRANSPARENT: Draw<BM_TRANSPARENT, Tpal_to_rgb>(bp, zoom); return;
|
||||
case BM_TRANSPARENT_REMAP: Draw<BM_TRANSPARENT_REMAP, Tpal_to_rgb>(bp, zoom); return;
|
||||
case BM_CRASH_REMAP: Draw<BM_CRASH_REMAP, Tpal_to_rgb>(bp, zoom); return;
|
||||
case BM_BLACK_REMAP: Draw<BM_BLACK_REMAP, Tpal_to_rgb>(bp, zoom); return;
|
||||
case BM_NORMAL_WITH_BRIGHTNESS: Draw<BM_NORMAL_WITH_BRIGHTNESS, Tpal_to_rgb>(bp, zoom); return;
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
#include "../stdafx.h"
|
||||
#include "../zoom_func.h"
|
||||
#include "../palette_func.h"
|
||||
#include "32bpp_simple.hpp"
|
||||
|
||||
#include "../table/sprites.h"
|
||||
@ -75,12 +76,17 @@ void Blitter_32bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Zoo
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT:
|
||||
/* TODO -- We make an assumption here that the remap in fact is transparency, not some colour.
|
||||
* This is never a problem with the code we produce, but newgrfs can make it fail... or at least:
|
||||
* we produce a result the newgrf maker didn't expect ;) */
|
||||
|
||||
/* Make the current colour a bit more black, so it looks like this image is transparent */
|
||||
if (src->a != 0) *dst = MakeTransparent(*dst, 192);
|
||||
if (src->a != 0) {
|
||||
*dst = MakeTransparent(*dst, 192);
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT_REMAP:
|
||||
/* Apply custom transparency remap. */
|
||||
if (src->a != 0) {
|
||||
*dst = this->LookupColourInPalette(bp->remap[GetNearestColourIndex(*dst)]);
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_NORMAL_WITH_BRIGHTNESS:
|
||||
|
@ -398,6 +398,18 @@ bmcr_alpha_blend_single:
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT_REMAP:
|
||||
/* Apply custom transparency remap. */
|
||||
for (uint x = (uint) bp->width; x > 0; x--) {
|
||||
if (src->a != 0) {
|
||||
*dst = this->LookupColourInPalette(remap[GetNearestColourIndex(*dst)]);
|
||||
}
|
||||
src_mv++;
|
||||
dst++;
|
||||
src++;
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_CRASH_REMAP:
|
||||
for (uint x = (uint) bp->width; x > 0; x--) {
|
||||
if (src_mv->m == 0) {
|
||||
@ -532,6 +544,7 @@ bm_normal:
|
||||
Draw<BM_COLOUR_REMAP, RM_WITH_MARGIN, BT_NONE, true>(bp, zoom); return;
|
||||
}
|
||||
case BM_TRANSPARENT: Draw<BM_TRANSPARENT, RM_NONE, BT_NONE, true>(bp, zoom); return;
|
||||
case BM_TRANSPARENT_REMAP: Draw<BM_TRANSPARENT_REMAP, RM_NONE, BT_NONE, true>(bp, zoom); return;
|
||||
case BM_CRASH_REMAP: Draw<BM_CRASH_REMAP, RM_NONE, BT_NONE, true>(bp, zoom); return;
|
||||
case BM_BLACK_REMAP: Draw<BM_BLACK_REMAP, RM_NONE, BT_NONE, true>(bp, zoom); return;
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "../zoom_func.h"
|
||||
#include "../settings_type.h"
|
||||
#include "../video/video_driver.hpp"
|
||||
#include "../palette_func.h"
|
||||
#include "40bpp_anim.hpp"
|
||||
#include "common.hpp"
|
||||
|
||||
@ -288,10 +289,6 @@ inline void Blitter_40bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT:
|
||||
/* TODO -- We make an assumption here that the remap in fact is transparency, not some colour.
|
||||
* This is never a problem with the code we produce, but newgrfs can make it fail... or at least:
|
||||
* we produce a result the newgrf maker didn't expect ;) */
|
||||
|
||||
/* Make the current colour a bit more black, so it looks like this image is transparent */
|
||||
src_n += n;
|
||||
if (src_px->a == 255) {
|
||||
@ -317,6 +314,28 @@ inline void Blitter_40bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
||||
}
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT_REMAP:
|
||||
/* Apply custom transparency remap. */
|
||||
src_n += n;
|
||||
if (src_px->a != 0) {
|
||||
src_px += n;
|
||||
do {
|
||||
if (*anim != 0) {
|
||||
*anim = remap[*anim];
|
||||
} else {
|
||||
*dst = this->LookupColourInPalette(remap[GetNearestColourIndex(*dst)]);
|
||||
*anim = 0;
|
||||
}
|
||||
anim++;
|
||||
dst++;
|
||||
} while (--n != 0);
|
||||
} else {
|
||||
dst += n;
|
||||
anim += n;
|
||||
src_px += n;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if (src_px->a == 255) {
|
||||
do {
|
||||
@ -389,6 +408,7 @@ void Blitter_40bppAnim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomL
|
||||
case BM_NORMAL: Draw<BM_NORMAL> (bp, zoom); return;
|
||||
case BM_COLOUR_REMAP: Draw<BM_COLOUR_REMAP>(bp, zoom); return;
|
||||
case BM_TRANSPARENT: Draw<BM_TRANSPARENT> (bp, zoom); return;
|
||||
case BM_TRANSPARENT_REMAP: Draw<BM_TRANSPARENT_REMAP>(bp, zoom); return;
|
||||
case BM_CRASH_REMAP: Draw<BM_CRASH_REMAP> (bp, zoom); return;
|
||||
case BM_BLACK_REMAP: Draw<BM_BLACK_REMAP> (bp, zoom); return;
|
||||
case BM_NORMAL_WITH_BRIGHTNESS: Draw<BM_NORMAL_WITH_BRIGHTNESS> (bp, zoom); return;
|
||||
|
@ -101,8 +101,9 @@ void Blitter_8bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Z
|
||||
dst += pixels;
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT: {
|
||||
const uint8 *remap = bp->remap;
|
||||
case BM_TRANSPARENT:
|
||||
case BM_TRANSPARENT_REMAP: {
|
||||
const uint8_t *remap = bp->remap;
|
||||
src += pixels;
|
||||
do {
|
||||
*dst = remap[*dst];
|
||||
|
@ -43,6 +43,7 @@ void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Zoom
|
||||
break;
|
||||
|
||||
case BM_TRANSPARENT:
|
||||
case BM_TRANSPARENT_REMAP:
|
||||
if (*src != 0) colour = bp->remap[*dst];
|
||||
break;
|
||||
|
||||
|
@ -20,7 +20,8 @@
|
||||
enum BlitterMode {
|
||||
BM_NORMAL, ///< Perform the simple blitting.
|
||||
BM_COLOUR_REMAP, ///< Perform a colour remapping.
|
||||
BM_TRANSPARENT, ///< Perform transparency colour remapping.
|
||||
BM_TRANSPARENT, ///< Perform transparency darkening remapping.
|
||||
BM_TRANSPARENT_REMAP, ///< Perform transparency colour remapping.
|
||||
BM_CRASH_REMAP, ///< Perform a crash remapping.
|
||||
BM_BLACK_REMAP, ///< Perform remapping to a completely blackened sprite
|
||||
BM_NORMAL_WITH_BRIGHTNESS, ///< Perform a simple blitting with brightness adjustment
|
||||
|
@ -823,7 +823,7 @@ public:
|
||||
this->square = GetSpriteSize(SPR_SQUARE);
|
||||
this->line_height = std::max(this->square.height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height;
|
||||
|
||||
size->height = 11 * this->line_height;
|
||||
size->height = 5 * this->line_height;
|
||||
resize->width = 1;
|
||||
resize->height = this->line_height;
|
||||
break;
|
||||
@ -966,6 +966,12 @@ public:
|
||||
SetDParam(0, g->index);
|
||||
draw_livery(STR_GROUP_NAME, livery_set ? g->livery : c->livery[LS_DEFAULT], this->sel == g->index, livery_set, this->indents[i] * WidgetDimensions::scaled.hsep_indent);
|
||||
}
|
||||
|
||||
if (this->vscroll->GetCount() == 0) {
|
||||
const StringID empty_labels[] = { STR_LIVERY_TRAIN_GROUP_EMPTY, STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY, STR_LIVERY_SHIP_GROUP_EMPTY, STR_LIVERY_AIRCRAFT_GROUP_EMPTY };
|
||||
VehicleType vtype = (VehicleType)(this->livery_class - LC_GROUP_RAIL);
|
||||
DrawString(ir.left, ir.right, y + text_offs, empty_labels[vtype], TC_BLACK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1127,24 +1133,21 @@ static const NWidgetPart _nested_select_company_livery_widgets [] = {
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_CLASS_ROAD), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_TRUCKLIST, STR_LIVERY_ROAD_VEHICLE_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_CLASS_SHIP), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_SHIPLIST, STR_LIVERY_SHIP_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_CLASS_AIRCRAFT), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_AIRPLANESLIST, STR_LIVERY_AIRCRAFT_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_RAIL), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_TRAIN, STR_LIVERY_TRAIN_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_ROAD), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_ROADVEH, STR_LIVERY_ROAD_VEHICLE_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_SHIP), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_SHIP, STR_LIVERY_SHIP_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_AIRCRAFT), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_AIRCRAFT, STR_LIVERY_AIRCRAFT_TOOLTIP),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(90, 22), SetFill(1, 1), EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_SCL_SPACER_DROPDOWN), SetMinimalSize(150, 12), SetFill(1, 1), EndContainer(),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_PRI_COL_DROPDOWN), SetMinimalSize(125, 12), SetFill(0, 1), SetDataTip(STR_JUST_STRING, STR_LIVERY_PRIMARY_TOOLTIP),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_SEC_COL_DROPDOWN), SetMinimalSize(125, 12), SetFill(0, 1),
|
||||
SetDataTip(STR_JUST_STRING, STR_LIVERY_SECONDARY_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_RAIL), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_TRAIN, STR_LIVERY_TRAIN_GROUP_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_ROAD), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_ROADVEH, STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_SHIP), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_SHIP, STR_LIVERY_SHIP_GROUP_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_AIRCRAFT), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_AIRCRAFT, STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), SetResize(1, 0), EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_SCL_MATRIX), SetMinimalSize(275, 0), SetResize(1, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_LIVERY_PANEL_TOOLTIP), SetScrollbar(WID_SCL_MATRIX_SCROLLBAR),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SCL_MATRIX_SCROLLBAR),
|
||||
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_SCL_SPACER_DROPDOWN), SetFill(1, 1), SetResize(1, 0), EndContainer(),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_PRI_COL_DROPDOWN), SetFill(0, 1), SetDataTip(STR_JUST_STRING, STR_LIVERY_PRIMARY_TOOLTIP),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_SEC_COL_DROPDOWN), SetFill(0, 1), SetDataTip(STR_JUST_STRING, STR_LIVERY_SECONDARY_TOOLTIP),
|
||||
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
|
178
src/gfx.cpp
178
src/gfx.cpp
@ -29,7 +29,6 @@
|
||||
#include "core/container_func.hpp"
|
||||
#include "viewport_func.h"
|
||||
|
||||
#include "table/palettes.h"
|
||||
#include "table/string_colours.h"
|
||||
#include "table/sprites.h"
|
||||
#include "table/control_codes.h"
|
||||
@ -62,33 +61,11 @@ SwitchMode _switch_mode; ///< The next mainloop command.
|
||||
std::chrono::steady_clock::time_point _switch_mode_time; ///< The time when the switch mode was requested.
|
||||
PauseMode _pause_mode;
|
||||
uint32 _pause_countdown;
|
||||
Palette _cur_palette;
|
||||
std::mutex _cur_palette_mutex;
|
||||
std::string _switch_baseset;
|
||||
static bool _adjust_gui_zoom_startup_done = false;
|
||||
|
||||
static byte _stringwidth_table[FS_END][224]; ///< Cache containing width of often used characters. @see GetCharacterWidth()
|
||||
DrawPixelInfo *_cur_dpi;
|
||||
byte _colour_gradient[COLOUR_END][8];
|
||||
|
||||
byte _colour_value[COLOUR_END] = {
|
||||
133, // COLOUR_DARK_BLUE
|
||||
99, // COLOUR_PALE_GREEN,
|
||||
48, // COLOUR_PINK,
|
||||
68, // COLOUR_YELLOW,
|
||||
184, // COLOUR_RED,
|
||||
152, // COLOUR_LIGHT_BLUE,
|
||||
209, // COLOUR_GREEN,
|
||||
95, // COLOUR_DARK_GREEN,
|
||||
150, // COLOUR_BLUE,
|
||||
79, // COLOUR_CREAM,
|
||||
134, // COLOUR_MAUVE,
|
||||
174, // COLOUR_PURPLE,
|
||||
195, // COLOUR_ORANGE,
|
||||
116, // COLOUR_BROWN,
|
||||
6, // COLOUR_GREY,
|
||||
15, // COLOUR_WHITE,
|
||||
};
|
||||
|
||||
struct GfxBlitterCtx {
|
||||
const DrawPixelInfo *dpi;
|
||||
@ -1040,8 +1017,9 @@ void DrawSpriteViewport(const SpritePointerHolder &sprite_store, const DrawPixel
|
||||
GfxBlitterCtx ctx(dpi);
|
||||
SpriteID real_sprite = GB(img, 0, SPRITE_WIDTH);
|
||||
if (HasBit(img, PALETTE_MODIFIER_TRANSPARENT)) {
|
||||
ctx.colour_remap_ptr = sprite_store.GetRecolourSprite(GB(pal, 0, PALETTE_WIDTH)) + 1;
|
||||
GfxMainBlitterViewport(ctx, sprite_store.GetSprite(real_sprite, SpriteType::Normal), x, y, BM_TRANSPARENT, sub, real_sprite);
|
||||
pal = GB(pal, 0, PALETTE_WIDTH);
|
||||
ctx.colour_remap_ptr = sprite_store.GetRecolourSprite(pal) + 1;
|
||||
GfxMainBlitterViewport(ctx, sprite_store.GetSprite(real_sprite, SpriteType::Normal), x, y, pal == PALETTE_TO_TRANSPARENT ? BM_TRANSPARENT : BM_TRANSPARENT_REMAP, sub, real_sprite);
|
||||
} else if (pal != PAL_NONE) {
|
||||
if (HasBit(pal, PALETTE_TEXT_RECOLOUR)) {
|
||||
ctx.SetColourRemap((TextColour)GB(pal, 0, PALETTE_WIDTH));
|
||||
@ -1087,8 +1065,9 @@ void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub,
|
||||
GfxBlitterCtx ctx(_cur_dpi);
|
||||
SpriteID real_sprite = GB(img, 0, SPRITE_WIDTH);
|
||||
if (HasBit(img, PALETTE_MODIFIER_TRANSPARENT)) {
|
||||
ctx.colour_remap_ptr = GetNonSprite(GB(pal, 0, PALETTE_WIDTH), SpriteType::Recolour) + 1;
|
||||
GfxMainBlitter(ctx, GetSprite(real_sprite, SpriteType::Normal, ZoomMask(zoom)), x, y, BM_TRANSPARENT, sub, real_sprite, zoom);
|
||||
pal = GB(pal, 0, PALETTE_WIDTH);
|
||||
ctx.colour_remap_ptr = GetNonSprite(pal, SpriteType::Recolour) + 1;
|
||||
GfxMainBlitter(ctx, GetSprite(real_sprite, SpriteType::Normal, ZoomMask(zoom)), x, y, pal == PALETTE_TO_TRANSPARENT ? BM_TRANSPARENT : BM_TRANSPARENT_REMAP, sub, real_sprite, zoom);
|
||||
} else if (pal != PAL_NONE) {
|
||||
if (HasBit(pal, PALETTE_TEXT_RECOLOUR)) {
|
||||
ctx.SetColourRemap((TextColour)GB(pal, 0, PALETTE_WIDTH));
|
||||
@ -1312,151 +1291,6 @@ static void GfxMainBlitter(const GfxBlitterCtx &ctx, const Sprite *sprite, int x
|
||||
GfxBlitter<1, true>(ctx, sprite, x, y, mode, sub, sprite_id, zoom);
|
||||
}
|
||||
|
||||
void DoPaletteAnimations();
|
||||
|
||||
Colour _water_palette[10];
|
||||
|
||||
void GfxInitPalettes()
|
||||
{
|
||||
MemCpyT<Colour>(_water_palette, (_settings_game.game_creation.landscape == LT_TOYLAND) ? _extra_palette_values.dark_water_toyland : _extra_palette_values.dark_water, 5);
|
||||
const Colour *s = (_settings_game.game_creation.landscape == LT_TOYLAND) ? _extra_palette_values.glitter_water_toyland : _extra_palette_values.glitter_water;
|
||||
for (int i = 0; i < 5; i++) {
|
||||
_water_palette[i + 5] = s[i * 3];
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> lock_state(_cur_palette_mutex);
|
||||
memcpy(&_cur_palette, &_palette, sizeof(_cur_palette));
|
||||
DoPaletteAnimations();
|
||||
}
|
||||
|
||||
#define EXTR(p, q) (((uint16)(palette_animation_counter * (p)) * (q)) >> 16)
|
||||
#define EXTR2(p, q) (((uint16)(~palette_animation_counter * (p)) * (q)) >> 16)
|
||||
|
||||
void DoPaletteAnimations()
|
||||
{
|
||||
/* Animation counter for the palette animation. */
|
||||
static int palette_animation_counter = 0;
|
||||
palette_animation_counter += 8;
|
||||
|
||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||
const Colour *s;
|
||||
const ExtraPaletteValues *ev = &_extra_palette_values;
|
||||
Colour old_val[PALETTE_ANIM_SIZE];
|
||||
const uint old_tc = palette_animation_counter;
|
||||
uint j;
|
||||
|
||||
if (blitter != nullptr && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
|
||||
palette_animation_counter = 0;
|
||||
}
|
||||
|
||||
Colour *palette_pos = &_cur_palette.palette[PALETTE_ANIM_START]; // Points to where animations are taking place on the palette
|
||||
/* Makes a copy of the current animation palette in old_val,
|
||||
* so the work on the current palette could be compared, see if there has been any changes */
|
||||
memcpy(old_val, palette_pos, sizeof(old_val));
|
||||
|
||||
/* Fizzy Drink bubbles animation */
|
||||
s = ev->fizzy_drink;
|
||||
j = EXTR2(512, EPV_CYCLES_FIZZY_DRINK);
|
||||
for (uint i = 0; i != EPV_CYCLES_FIZZY_DRINK; i++) {
|
||||
*palette_pos++ = s[j];
|
||||
j++;
|
||||
if (j == EPV_CYCLES_FIZZY_DRINK) j = 0;
|
||||
}
|
||||
|
||||
/* Oil refinery fire animation */
|
||||
s = ev->oil_refinery;
|
||||
j = EXTR2(512, EPV_CYCLES_OIL_REFINERY);
|
||||
for (uint i = 0; i != EPV_CYCLES_OIL_REFINERY; i++) {
|
||||
*palette_pos++ = s[j];
|
||||
j++;
|
||||
if (j == EPV_CYCLES_OIL_REFINERY) j = 0;
|
||||
}
|
||||
|
||||
/* Radio tower blinking */
|
||||
{
|
||||
byte i = (palette_animation_counter >> 1) & 0x7F;
|
||||
byte v;
|
||||
|
||||
if (i < 0x3f) {
|
||||
v = 255;
|
||||
} else if (i < 0x4A || i >= 0x75) {
|
||||
v = 128;
|
||||
} else {
|
||||
v = 20;
|
||||
}
|
||||
palette_pos->r = v;
|
||||
palette_pos->g = 0;
|
||||
palette_pos->b = 0;
|
||||
palette_pos++;
|
||||
|
||||
i ^= 0x40;
|
||||
if (i < 0x3f) {
|
||||
v = 255;
|
||||
} else if (i < 0x4A || i >= 0x75) {
|
||||
v = 128;
|
||||
} else {
|
||||
v = 20;
|
||||
}
|
||||
palette_pos->r = v;
|
||||
palette_pos->g = 0;
|
||||
palette_pos->b = 0;
|
||||
palette_pos++;
|
||||
}
|
||||
|
||||
/* Handle lighthouse and stadium animation */
|
||||
s = ev->lighthouse;
|
||||
j = EXTR(256, EPV_CYCLES_LIGHTHOUSE);
|
||||
for (uint i = 0; i != EPV_CYCLES_LIGHTHOUSE; i++) {
|
||||
*palette_pos++ = s[j];
|
||||
j++;
|
||||
if (j == EPV_CYCLES_LIGHTHOUSE) j = 0;
|
||||
}
|
||||
|
||||
/* Dark blue water */
|
||||
s = (_settings_game.game_creation.landscape == LT_TOYLAND) ? ev->dark_water_toyland : ev->dark_water;
|
||||
j = EXTR(320, EPV_CYCLES_DARK_WATER);
|
||||
for (uint i = 0; i != EPV_CYCLES_DARK_WATER; i++) {
|
||||
*palette_pos++ = s[j];
|
||||
j++;
|
||||
if (j == EPV_CYCLES_DARK_WATER) j = 0;
|
||||
}
|
||||
|
||||
/* Glittery water */
|
||||
s = (_settings_game.game_creation.landscape == LT_TOYLAND) ? ev->glitter_water_toyland : ev->glitter_water;
|
||||
j = EXTR(128, EPV_CYCLES_GLITTER_WATER);
|
||||
for (uint i = 0; i != EPV_CYCLES_GLITTER_WATER / 3; i++) {
|
||||
*palette_pos++ = s[j];
|
||||
j += 3;
|
||||
if (j >= EPV_CYCLES_GLITTER_WATER) j -= EPV_CYCLES_GLITTER_WATER;
|
||||
}
|
||||
|
||||
if (blitter != nullptr && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
|
||||
palette_animation_counter = old_tc;
|
||||
} else {
|
||||
if (memcmp(old_val, &_cur_palette.palette[PALETTE_ANIM_START], sizeof(old_val)) != 0 && _cur_palette.count_dirty == 0) {
|
||||
/* Did we changed anything on the palette? Seems so. Mark it as dirty */
|
||||
_cur_palette.first_dirty = PALETTE_ANIM_START;
|
||||
_cur_palette.count_dirty = PALETTE_ANIM_SIZE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine a contrasty text colour for a coloured background.
|
||||
* @param background Background colour.
|
||||
* @param threshold Background colour brightness threshold below which the background is considered dark and TC_WHITE is returned, range: 0 - 255, default 128.
|
||||
* @return TC_BLACK or TC_WHITE depending on what gives a better contrast.
|
||||
*/
|
||||
TextColour GetContrastColour(uint8 background, uint8 threshold)
|
||||
{
|
||||
Colour c = _cur_palette.palette[background];
|
||||
/* Compute brightness according to http://www.w3.org/TR/AERT#color-contrast.
|
||||
* The following formula computes 1000 * brightness^2, with brightness being in range 0 to 255. */
|
||||
uint sq1000_brightness = c.r * c.r * 299 + c.g * c.g * 587 + c.b * c.b * 114;
|
||||
/* Compare with threshold brightness which defaults to 128 (50%) */
|
||||
return sq1000_brightness < ((uint) threshold) * ((uint) threshold) * 1000 ? TC_WHITE : TC_BLACK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize _stringwidth_table cache
|
||||
* @param monospace Whether to load the monospace cache or the normal fonts.
|
||||
|
@ -40,6 +40,7 @@
|
||||
#define GFX_FUNC_H
|
||||
|
||||
#include "gfx_type.h"
|
||||
#include "palette_func.h"
|
||||
#include "strings_type.h"
|
||||
#include "string_type.h"
|
||||
#include <vector>
|
||||
@ -169,7 +170,6 @@ void SetPendingDirtyBlocks(int left, int top, int right, int bottom);
|
||||
void UnsetDirtyBlocks(int left, int top, int right, int bottom);
|
||||
void MarkWholeScreenDirty();
|
||||
|
||||
void GfxInitPalettes();
|
||||
void CheckBlitter();
|
||||
|
||||
bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int height);
|
||||
@ -228,43 +228,4 @@ inline int GetCharacterHeight(FontSize size)
|
||||
return font_height_cache[size];
|
||||
}
|
||||
|
||||
TextColour GetContrastColour(uint8 background, uint8 threshold = 128);
|
||||
|
||||
/**
|
||||
* All 16 colour gradients
|
||||
* 8 colours per gradient from darkest (0) to lightest (7)
|
||||
*/
|
||||
extern byte _colour_gradient[COLOUR_END][8];
|
||||
extern byte _colour_value[COLOUR_END];
|
||||
|
||||
/**
|
||||
* Return the colour for a particular greyscale level.
|
||||
* @param level Intensity, 0 = black, 15 = white
|
||||
* @return colour
|
||||
*/
|
||||
#define GREY_SCALE(level) (level)
|
||||
|
||||
static const uint8 PC_BLACK = GREY_SCALE(1); ///< Black palette colour.
|
||||
static const uint8 PC_DARK_GREY = GREY_SCALE(6); ///< Dark grey palette colour.
|
||||
static const uint8 PC_GREY = GREY_SCALE(10); ///< Grey palette colour.
|
||||
static const uint8 PC_WHITE = GREY_SCALE(15); ///< White palette colour.
|
||||
|
||||
static const uint8 PC_VERY_DARK_RED = 0xB2; ///< Almost-black red palette colour.
|
||||
static const uint8 PC_DARK_RED = 0xB4; ///< Dark red palette colour.
|
||||
static const uint8 PC_RED = 0xB8; ///< Red palette colour.
|
||||
|
||||
static const uint8 PC_VERY_DARK_BROWN = 0x56; ///< Almost-black brown palette colour.
|
||||
|
||||
static const uint8 PC_ORANGE = 0xC2; ///< Orange palette colour.
|
||||
|
||||
static const uint8 PC_YELLOW = 0xBF; ///< Yellow palette colour.
|
||||
static const uint8 PC_LIGHT_YELLOW = 0x44; ///< Light yellow palette colour.
|
||||
static const uint8 PC_VERY_LIGHT_YELLOW = 0x45; ///< Almost-white yellow palette colour.
|
||||
|
||||
static const uint8 PC_GREEN = 0xD0; ///< Green palette colour.
|
||||
|
||||
static const uint8 PC_VERY_DARK_BLUE = 0x9A; ///< Almost-black blue palette colour.
|
||||
static const uint8 PC_DARK_BLUE = 0x9D; ///< Dark blue palette colour.
|
||||
static const uint8 PC_LIGHT_BLUE = 0x98; ///< Light blue palette colour.
|
||||
|
||||
#endif /* GFX_FUNC_H */
|
||||
|
@ -256,6 +256,7 @@ STR_UNITS_HEIGHT_METRIC :{DECIMAL} m
|
||||
STR_UNITS_HEIGHT_SI :{DECIMAL} m
|
||||
|
||||
STR_UNITS_DAYS :{COMMA}{NBSP}dag{P "" s}
|
||||
STR_UNITS_SECONDS :{COMMA}{NBSP}sekund{P "" er}
|
||||
|
||||
# Common window strings
|
||||
STR_LIST_FILTER_TITLE :{BLACK}Filtrer udtryk:
|
||||
@ -1489,7 +1490,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
|
||||
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE :Terræn type: {STRING}
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Kun TerraGenesis) Størrelse af højderygge
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Vælg højden på bakker og bjerge i landskabet
|
||||
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industri tæthed: {STRING}
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Angiv hvor mange industrier skal genereres og hvilket niveau der bevares i løbet af spillet
|
||||
@ -1498,18 +1499,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimal afstan
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Grænse for hvor langt fra kortets kant olieraffinaderier kan blive bygget. På ø-kort sikrer dette at de er nær kysten. På kort større end 256 felter bliver denne værdi automatisk skaleret op.
|
||||
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snelinjehøjden: {STRING}
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Styrer ved hvilken højde sneen starter i det sub-arktiske landskab. Sne påvirker også industri-generering og byers krav for at vokse.Kan kun ændres i Scenarieeditoren, og beregnes ellers via "snedække".
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Vælg, i hvilken højde sneen starter i det subarktiske landskab. Sne påvirker også industriproduktion og byvækstkrav. Kan kun ændres via Scenario Editor eller på anden måde beregnes via "snedækning"
|
||||
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE :Snedække: {STRING}
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Styrer den omtrentlige mængde sne i det sub-arktiske landskab. Sne påvirker også industri-generering og byernes krav for at vokse. Anvendes kun under landskabsgenerering. Land lige over havniveau er altid snefrit.
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Vælg den omtrentlige mængde sne på det subarktiske landskab. Sne påvirker også industriproduktion og byvækstkrav. Bruges kun under kortgenerering. Havniveau og kystfliser har aldrig sne.
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
|
||||
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE :Ørkendækning: {STRING}
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Styrer den omtrentlige mængde ørken i det tropiske landskab. Ørken påvirker også industri-generering. Anvendes kun under landskabsgenerering.
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Vælg den omtrentlige mængde ørken i det tropiske landskab. Ørken påvirker også industriproduktion og byvækstkrav. Bruges kun under kortgenerering
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
|
||||
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Tærrenets hårdhed (kun TerraGenesis) : {STRING}
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis kun) Vælg frekvensen af bakkerne: Glatte landskaber har færre, mere udbredt bakker. Ujævne landskaber har mange bakker, der kan se gentaget ud
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Vælg formen og antallet af bakker. Glatte landskaber har færre, bredere bakker, mens barske landskaber har flere mindre bakker.
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Meget blødt
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Blødt
|
||||
@ -1517,7 +1518,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Råt
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Meget råt
|
||||
|
||||
STR_CONFIG_SETTING_VARIETY :Forskelligheds fordeling: {STRING}
|
||||
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis kun) Kontrollere, om kortet indeholder både bjerg- og flade områder. Da dette kun gør kortet fladere bør andre indstillinger sættes til bjergrigt
|
||||
STR_CONFIG_SETTING_VARIETY_HELPTEXT :Vælg om kortet indeholder både bjerge og flade områder. Jo højere sorten er, jo flere højdeforskelle mellem bjergrige og flade områder.
|
||||
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT :Floder antal: {STRING}
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Vælg, hvor mange floder at skabe
|
||||
@ -1658,6 +1659,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Aktiver brug af
|
||||
STR_CONFIG_SETTING_LOADING_INDICATORS :Benyt laste-indikatorer: {STRING}
|
||||
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Vælg om lastnings-indikatorer vises ved pålæsning og aflæsning af køretøjer
|
||||
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE :Tidsenheder for køreplaner: {STRING}
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Vælg de tidsenheder, der skal bruges til køreplaner
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dage
|
||||
@ -3211,7 +3213,9 @@ STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Vælg st
|
||||
STR_MAPGEN_DATE :{BLACK}Dato:
|
||||
STR_MAPGEN_DATE_TOOLTIP :{BLACK}Vælg startdato
|
||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Antal industrier:
|
||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Vælg tætheden af industrier eller et brugerdefineret tal
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Højeste bjergtop:
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Vælg den højeste top, som spillet vil forsøge at skabe, målt i højde over havets overflade
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Forøger den maksimale højde på højeste bjergtop på kortet med én
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Sænker den maksimale højde på højeste bjergtop på kortet med én
|
||||
STR_MAPGEN_SNOW_COVERAGE :{BLACK}Snedække:
|
||||
@ -3224,6 +3228,7 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Sænker
|
||||
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||
STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terræntype:
|
||||
STR_MAPGEN_SEA_LEVEL :{BLACK}Havniveau
|
||||
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Vælg havniveau
|
||||
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Floder:
|
||||
STR_MAPGEN_SMOOTHNESS :{BLACK}Blødhed:
|
||||
STR_MAPGEN_VARIETY :{BLACK}Varietet af distributionen:
|
||||
@ -3261,6 +3266,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalanske
|
||||
|
||||
# Strings for map borders at game generation
|
||||
STR_MAPGEN_BORDER_TYPE :{BLACK}Kortkanter:
|
||||
STR_MAPGEN_BORDER_TYPE_TOOLTIP :Vælg ydre grænser for spilverdenen
|
||||
STR_MAPGEN_NORTHWEST :{BLACK}Nordvest
|
||||
STR_MAPGEN_NORTHEAST :{BLACK}Nordøst
|
||||
STR_MAPGEN_SOUTHEAST :{BLACK}Sydøst
|
||||
@ -3273,7 +3279,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuel
|
||||
|
||||
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Højdekortets rotation:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Højdekortets navn:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Navnet på højdekort-billedfilen
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Størrelse:
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Størrelsen på kildehøjdekortbilledet. For de bedste resultater skal hver kant matche en tilgængelig kortkantlængde i OpenTTD, såsom 256, 512, 1024 osv.
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
|
||||
|
||||
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Ønsket højeste bjergtop
|
||||
@ -3288,6 +3296,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Fladt la
|
||||
STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generer fladt landskab
|
||||
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Tilfældigt land
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Højde af fladt landskab:
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Vælg højden af landet over havets overflade
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Sæt højden af fladt landskab en ned
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Sæt højden af fladt landskab en op
|
||||
|
||||
@ -4614,6 +4623,7 @@ STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Skift me
|
||||
STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY}
|
||||
STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY}
|
||||
STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sek
|
||||
STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} sek
|
||||
|
||||
|
||||
# Date window (for timetable)
|
||||
|
@ -1491,7 +1491,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Origineel
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
|
||||
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE :Terreintype: {STRING}
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Alleen TerraGenesis) Heuvelachtigheid van het landschap
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Kies de hoogte van heuvels en bergen in het landschap
|
||||
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriedichtheid: {STRING}
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Stelt in hoeveel industrieën worden gegenereerd en welk niveau tijdens het spel moet worden gehandhaafd
|
||||
@ -1500,18 +1500,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximumafstand
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olieraffinaderijen worden alleen gebouwd nabij de kaartgrens, dat is aan de kust van eilandkaarten
|
||||
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sneeuwhoogte: {STRING}
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Stelt in op welke hoogte de sneeuw begint in subarctisch landschap. Sneeuw heeft ook invloed op het ontstaan van industrieën en op de vereisten voor stadsgroei. Kan alleen worden aangepast in de scenariobewerker of wordt berekend met behulp van 'sneeuwoppervlak'
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kies op welke hoogte de sneeuw begint in subarctisch landschap. Sneeuw heeft ook invloed op het ontstaan van industrieën en op de vereisten voor stadsgroei. Kan alleen worden aangepast in de scenariobewerker of wordt berekend met behulp van 'sneeuwoppervlak'
|
||||
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE :Sneeuwoppervlak: {STRING}
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Bepaalt de hoeveelheid sneeuw in het subarctische landschap. Sneeuw is ook van invloed op de industrieën en de groei van steden. Wordt alleen gebruikt tijdens het maken van de kaart. Land net boven zeeniveau krijgt nooit sneeuw
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Kies de hoeveelheid sneeuw in het subarctische landschap. Sneeuw is ook van invloed op de industrieën en de groei van steden. Wordt alleen gebruikt tijdens het maken van de kaart. Land op zeeniveau of aan de kust krijgt nooit sneeuw.
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
|
||||
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE :Woestijnoppervlak: {STRING}
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Bepaalt de hoeveelheid woestijn in het tropische landschap. Woestijn is ook van invloed op industrieën. Wordt alleen gebruikt tijdens het maken van de kaart
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Kies de hoeveelheid woestijn in het tropische landschap. Woestijn is ook van invloed op het ontstaan van industrieën en de vereisten voor stadsgroei. Wordt alleen gebruikt tijdens het maken van de kaart
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
|
||||
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Ruwheid van het terrein: {STRING}
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Alleen TerraGenesis) Selecteer de frequentie van heuvels: gladde landschappen hebben minder, meer wijdverspreide heuvels. Ruwe landschappen hebben veel heuvels, die repetitief kunnen lijken.
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Kies vorm en aantal heuvels. Gladde landschappen hebben minder en bredere heuvels. Ruwe landschappen hebben meer, maar kleinere heuvels.
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Erg glad
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Glad
|
||||
@ -1519,7 +1519,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Ruig
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Erg ruig
|
||||
|
||||
STR_CONFIG_SETTING_VARIETY :Variëteit distributie: {STRING}
|
||||
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Alleen TerraGenesis) Bepaalt of de kaart zowel bergachtige als vlakke gebieden bevat. Aangezien dit de kaart alleen platter maakt, moeten andere instellingen worden ingesteld op bergachtig.
|
||||
STR_CONFIG_SETTING_VARIETY_HELPTEXT :Kies of de kaart zowel bergachtige als vlakke gebieden bevat. Hoe groter de variatie, hoe meer verschillen in hoogte tussen bergachtige en vlakke gebieden.
|
||||
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT :Hoeveelheid rivieren: {STRING}
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Selecteer hoeveel rivieren er gegenereerd worden
|
||||
@ -1539,6 +1539,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Links rijden
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Rechts rijden
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Draaiing van hoogtekaart: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Kies in welke richting de hoogtekaart wordt gedraaid om deze aan te passen aan de spelwereld
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Tegen de klok in
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Met de klok mee
|
||||
@ -3208,11 +3209,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Kaartgro
|
||||
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Selecteer het formaat van de kaart in tegels. Het aantal beschikbare tegels zal iets kleiner zijn
|
||||
STR_MAPGEN_BY :{BLACK}*
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Aantal steden:
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Kies de dichtheid van steden of een aangepast getal
|
||||
STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Plaatsnamen:
|
||||
STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Stijl voor plaatsnamen kiezen
|
||||
STR_MAPGEN_DATE :{BLACK}Datum:
|
||||
STR_MAPGEN_DATE_TOOLTIP :{BLACK}Kies de startdatum
|
||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Aantal industrieën:
|
||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Kies de dichtheid van industrieën of een aangepast getal
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Hoogste berg:
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Kies de hoogste piek die het spel probeert te creëren, gemeten in hoogte boven zeeniveau
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Verhoogt de maximale hoogte van de hoogste berg op de kaart met één
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Verlaagt de maximale hoogte van de hoogste berg op de kaart met één
|
||||
STR_MAPGEN_SNOW_COVERAGE :{BLACK}Sneeuwoppervlak:
|
||||
@ -3225,10 +3230,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Verklein
|
||||
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||
STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terreintype:
|
||||
STR_MAPGEN_SEA_LEVEL :{BLACK}Zeeniveau:
|
||||
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Kies het zeeniveau
|
||||
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rivieren:
|
||||
STR_MAPGEN_SMOOTHNESS :{BLACK}Gladheid:
|
||||
STR_MAPGEN_VARIETY :{BLACK}Landschapsvariatie:
|
||||
STR_MAPGEN_GENERATE :{WHITE}Maken
|
||||
STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Creëer de wereld en speel OpenTTD!
|
||||
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF-instellingen
|
||||
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}NewGRF-instellingen weergeven
|
||||
STR_MAPGEN_AI_SETTINGS :{BLACK}AI-instellingen
|
||||
@ -3261,6 +3268,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalaans
|
||||
|
||||
# Strings for map borders at game generation
|
||||
STR_MAPGEN_BORDER_TYPE :{BLACK}Kaartranden:
|
||||
STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Kies de grenzen van de spelwereld
|
||||
STR_MAPGEN_NORTHWEST :{BLACK}Noordwest
|
||||
STR_MAPGEN_NORTHEAST :{BLACK}Noordoost
|
||||
STR_MAPGEN_SOUTHEAST :{BLACK}Zuidoost
|
||||
@ -3273,7 +3281,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Handmati
|
||||
|
||||
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotatie van hoogtekaart:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Naam van hoogtekaart:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}De naam van het hoogtekaart-bestand
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Grootte:
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}De grootte van de bron-hoogtekaart. Voor optimaal resultaat kies je de lengten van de zijden gelijk aan de beschikbare kaartmaten in OpenTTD, zoals 256, 512, 1024 enz.
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
|
||||
|
||||
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Gewenste hoogte van bergen
|
||||
@ -3288,6 +3298,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Vlak lan
|
||||
STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Genereer een vlakke kaart
|
||||
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Willekeurig land
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Hoogte van vlak land:
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Kies de hoogte van het land boven zee
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Verlaag de hoogte van vlak land met één
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Verhoog de hoogte van vlak land met één
|
||||
|
||||
|
@ -2196,12 +2196,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show tra
|
||||
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Show road vehicle colour schemes
|
||||
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Show ship colour schemes
|
||||
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Show aircraft colour schemes
|
||||
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Show colours of train groups
|
||||
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Show colours of road vehicle groups
|
||||
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Show colours of ship groups
|
||||
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Show colours of aircraft groups
|
||||
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Choose the primary colour for the selected scheme. Ctrl+Click will set this colour for every scheme
|
||||
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Choose the secondary colour for the selected scheme. Ctrl+Click will set this colour for every scheme
|
||||
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Select a colour scheme to change, or multiple schemes with Ctrl+Click. Click on the box to toggle use of the scheme
|
||||
STR_LIVERY_TRAIN_GROUP_EMPTY :No train groups are set up
|
||||
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :No road vehicle groups are set up
|
||||
STR_LIVERY_SHIP_GROUP_EMPTY :No ship groups are set up
|
||||
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :No aircraft groups are set up
|
||||
|
||||
###length 23
|
||||
STR_LIVERY_DEFAULT :Standard Livery
|
||||
STR_LIVERY_DEFAULT :Default Livery
|
||||
STR_LIVERY_STEAM :Steam Engine
|
||||
STR_LIVERY_DIESEL :Diesel Engine
|
||||
STR_LIVERY_ELECTRIC :Electric Engine
|
||||
|
@ -4467,9 +4467,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}How to c
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :is equal to
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :is not equal to
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :is less than
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :is less or equal to
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :is less than or equal to
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :is more than
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :is more or equal to
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :is more than or equal to
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :is true
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :is false
|
||||
|
||||
|
@ -255,6 +255,9 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP}
|
||||
STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m
|
||||
STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m
|
||||
|
||||
STR_UNITS_DAYS :{COMMA}{NBSP}vrk
|
||||
STR_UNITS_SECONDS :{COMMA}{NBSP}sekunti{P "" a}
|
||||
STR_UNITS_TICKS :{COMMA}{NBSP}räpäys{P "" tä}
|
||||
|
||||
# Common window strings
|
||||
STR_LIST_FILTER_TITLE :{BLACK}Suodatin:
|
||||
@ -719,6 +722,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Valitse
|
||||
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Poista musiikkiraita nykyiseltä soittolistalta napsauttamalla (vain oma{NBSP}1 tai oma{NBSP}2)
|
||||
|
||||
# Highscore window
|
||||
STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Huippuyhtiöt
|
||||
STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}.
|
||||
STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Kaupantekijä
|
||||
STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Yrittäjä
|
||||
@ -1487,7 +1491,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Alkuperäinen
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
|
||||
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE :Maaston tyyppi: {STRING}
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Vain TerraGenesis) Maaston mäkisyys
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Valitse maiseman mäkien ja vuorten korkeus
|
||||
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Teollisuuden määrä: {STRING}
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Määritä, kuinka paljon teollisuutta tulisi luoda ja millä tasolla teollisuuden tulisi pysytellä pelin aikana
|
||||
@ -1496,18 +1500,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Suurin sallittu
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Öljynjalostamojen ja öljynporauslauttojen suurin etäisyys kartan reunasta. Saarikartoilla tämä takaa sen, että ne ovat lähellä rannikkoa. Yli 256 ruudun kartoilla tämä arvo suhteutetaan kartan kokoon.
|
||||
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Lumirajan korkeus: {STRING}
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Määritä, millä korkeudella lumiraja on pohjoisessa maastotyypissä. Lumi vaikuttaa teollisuuslaitosten luontiin sekä kuntien kasvuedellytyksiin. Voidaan muuttaa vain Skenaariomuokkaimessa, muuten lasketaan ”lumen peiton” perusteella
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Säätää lumirajan korkeutta pohjoisessa maastossa. Lumi vaikuttaa myös teollisuuslaitosten luontiin ja kuntien kasvuedellytyksiin. Voidaan muuttaa vain skenaariomuokkaimessa, lasketaan muutoin ”lumen peiton” perusteella
|
||||
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE :Lumen peitto: {STRING}
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Säätele lumen määrän suuruusluokkaa pohjoisessa maastossa. Lumi vaikuttaa myös teollisuuden luontiin ja kuntien kasvuedellytyksiin. Käytetään vain karttaa luodessa. Juuri merenpinnan yläpuolella oleva maa on aina lumetonta
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Säätää lumen määrän suuruusluokkaa pohjoisessa maastossa. Lumi vaikuttaa myös teollisuuslaitosten luontiin ja kuntien kasvuedellytyksiin. Käytetään vain karttaa luotaessa. Merenpinnan tasolla sijaitsevat ruudut ja rannikkoruudut ovat aina lumettomat.
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}{NBSP}%
|
||||
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE :Aavikon peitto: {STRING}
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Säätele aavikon määrän suuruusluokkaa subtrooppisessa maastossa. Aavikko vaikuttaa myös teollisuuden luontiin. Käytetään vain karttaa luodessa
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Säätele aavikon määrän suuruusluokkaa subtrooppisessa maastossa. Aavikko vaikuttaa myös teollisuuslaitosten luontiin ja kuntien kasvuedellytyksiin. Käytetään vain karttaa luotaessa.
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}{NBSP}%
|
||||
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Maaston epätasaisuus: {STRING}
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Vain TerraGenesis) Määritä mäkien tiheys: Tasaisessa maastossa mäet ovat laajempia ja niitä on vähemmän. Epätasaisessa maastossa on enemmän mäkiä, mikä voi saada maaston näyttämään itseään toistavalta
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Määritä mäkien muoto ja tiheys. Tasaisessa maastossa mäkiä on vähemmän ja ne ovat laajempia, kun taas epätasaisessa maastossa on useampia pienempiä mäkiä.
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Erittäin tasainen
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Tasainen
|
||||
@ -1515,7 +1519,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Epätasainen
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Erittäin epätasainen
|
||||
|
||||
STR_CONFIG_SETTING_VARIETY :Maaston vaihtelu: {STRING}
|
||||
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Vain TerraGenesis) Valitse, onko kartalla sekä vuoristoisia että tasaisia alueita. Koska tämä asetus tekee maastosta tasaisempaa, muut asetukset tulisi määrittää vuoristoisiksi
|
||||
STR_CONFIG_SETTING_VARIETY_HELPTEXT :Valitse, onko kartalla sekä vuoristoisia että tasaisia alueita. Mitä suurempi on vaihtelu, sitä suurempia ovat korkeuserot vuoristoisten ja tasaisten alueiden välillä.
|
||||
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT :Jokien määrä: {STRING}
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Valitse, kuinka paljon jokia luodaan
|
||||
@ -1535,6 +1539,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Vasemmanpuoline
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Oikeanpuolinen liikenne
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Korkeuskartan pyöritys:{STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Valitse, mihin suuntaan korkeuskartan kuvaa kierretään pelimaailmaan sopiakseen
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Vastapäivään
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Myötäpäivään
|
||||
@ -1655,7 +1660,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Salli kehittyne
|
||||
STR_CONFIG_SETTING_LOADING_INDICATORS :Lastausilmaisimet: {STRING}
|
||||
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Määritä näytetäänkö lastausilmaisimet kulkuneuvojen yläpuolella lastatessa ja purettaessa rahtia
|
||||
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE :Aikataulujen aikayksikkö: {STRING}
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Valitse kulkuneuvojen aikatauluissa käytettävä aikayksikkö
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Vuorokaudet
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Sekunnit
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Räpäykset
|
||||
|
||||
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Näytä saapuminen ja lähtö aikatauluissa: {STRING}
|
||||
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Näytä odotetut saapumis- ja lähtemisajat aikatauluissa
|
||||
@ -2344,7 +2354,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nimi nä
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Aseta salasana
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Jos peliin ei halua ulkopuolisia, voi sen suojata salasanalla
|
||||
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Näkyvyys
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Näkyvyys:
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Näkyykö palvelimesi muille julkisessa listauksessa
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} asiakas{P "" ta}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Pelaajien enimmäismäärä:
|
||||
@ -3199,11 +3209,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Kartan k
|
||||
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Valitse kartan koko ruutuina. Saatavilla olevien ruutujen määrä on hieman alhaisempi
|
||||
STR_MAPGEN_BY :{BLACK}×
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Kuntien määrä:
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Valitse kuntien tiheys tai valinnainen määrä
|
||||
STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Kuntien nimet:
|
||||
STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Valitse kuntien nimien tyyli
|
||||
STR_MAPGEN_DATE :{BLACK}Päivämäärä:
|
||||
STR_MAPGEN_DATE_TOOLTIP :{BLACK}Valitse aloituspäivä
|
||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Teollisuuden määrä:
|
||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Valitse teollisuuden tiheys tai valinnainen määrä
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Korkein huippu:
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Valitse korkein huippu, jonka peli pyrkii luomaan, mitattuna korkeutena merenpinnasta
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Korota kartan korkeimman huipun maksimikorkeutta yhdellä
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Madalla kartan korkeimman huipun maksimikorkeutta yhdellä
|
||||
STR_MAPGEN_SNOW_COVERAGE :{BLACK}Lumen peitto:
|
||||
@ -3216,10 +3230,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Vähenn
|
||||
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}{NBSP}%
|
||||
STR_MAPGEN_TERRAIN_TYPE :{BLACK}Maaston tyyppi:
|
||||
STR_MAPGEN_SEA_LEVEL :{BLACK}Merenpinta:
|
||||
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Valitse merenpinnan taso
|
||||
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Joet:
|
||||
STR_MAPGEN_SMOOTHNESS :{BLACK}Tasaisuus:
|
||||
STR_MAPGEN_VARIETY :{BLACK}Vaihtelu:
|
||||
STR_MAPGEN_GENERATE :{WHITE}Generoi
|
||||
STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Luo maailma ja pelaa OpenTTD:tä!
|
||||
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF-asetukset
|
||||
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Näytä NewGRF-asetukset
|
||||
STR_MAPGEN_AI_SETTINGS :{BLACK}Tekoälyasetukset
|
||||
@ -3252,6 +3268,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Katalonialainen
|
||||
|
||||
# Strings for map borders at game generation
|
||||
STR_MAPGEN_BORDER_TYPE :{BLACK}Kartan reunat:
|
||||
STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Valitse pelimaailman reunukset
|
||||
STR_MAPGEN_NORTHWEST :{BLACK}Luode
|
||||
STR_MAPGEN_NORTHEAST :{BLACK}Koillinen
|
||||
STR_MAPGEN_SOUTHEAST :{BLACK}Kaakko
|
||||
@ -3264,7 +3281,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuaali
|
||||
|
||||
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Korkeuskartan kierto:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Korkeuskartan nimi:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Korkeuskartan kuvatiedoston nimi
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Koko:
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Korkeuskartan lähdekuvan koko. Paras tulos tulee, kun kuvan mitat vastaavat OpenTTD:n karttojen reunamittoja, kuten 256, 512, 1024, jne.
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM}×{NUM}
|
||||
|
||||
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Huipun tavoitekorkeus
|
||||
@ -3279,6 +3298,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Tasainen
|
||||
STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Luo tasainen maa
|
||||
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Satunnainen maa
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Tasaisen maan korkeus:
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Valitse merenpinnan yläpuolisen maan korkeus
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Siirrä tasaista maata yksi alaspäin
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Siirrä tasaista maata yksi ylöspäin
|
||||
|
||||
@ -4572,8 +4592,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Kulkuneu
|
||||
STR_TIMETABLE_STATUS_LATE :{BLACK}Kulkuneuvo on {STRING} myöhässä
|
||||
STR_TIMETABLE_STATUS_EARLY :{BLACK}Kulkuneuvo on {STRING} etuajassa
|
||||
STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tämä aikataulu ei ole vielä alkanut
|
||||
STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Tämä aikataulu alkaa {STRING}
|
||||
STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Tämä aikataulu alkaa {COMMA} sekunnin päästä
|
||||
|
||||
STR_TIMETABLE_START :{BLACK}Käynnistä aikataulu
|
||||
STR_TIMETABLE_START_TOOLTIP :{BLACK}Valitse tämän aikataulun alkamisajankohta. Ctrl+napsautus jakaa tasaisesti kaikkien tätä käskyä jakavien kulkuneuvojen lähtöajat niiden keskinäisen järjestyksen mukaan, mikäli käsky on kokonaan aikataulutettu
|
||||
|
||||
STR_TIMETABLE_START_SECONDS_QUERY :Sekunteja aikataulun alkamiseen
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuta aikaa
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuta aikaa, jonka valitun käskyn tulisi kestää. Ctrl+napsautus asettaa keston kaikille käskyille
|
||||
@ -4597,6 +4622,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Odotettu
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Aikataulu
|
||||
STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Vaihda odotetun ja aikataulun välillä
|
||||
|
||||
STR_TIMETABLE_ARRIVAL_DATE :T: {COLOUR}{DATE_TINY}
|
||||
STR_TIMETABLE_DEPARTURE_DATE :L: {COLOUR}{DATE_TINY}
|
||||
STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :T: {COLOUR}{COMMA} s
|
||||
STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :L: {COLOUR}{COMMA} s
|
||||
|
||||
|
||||
# Date window (for timetable)
|
||||
|
@ -719,6 +719,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Click pe
|
||||
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Apasă pe melodie pentru a o elimina din programul actual (doar Custom1 sau Custom2)
|
||||
|
||||
# Highscore window
|
||||
STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Companii de top
|
||||
STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}.
|
||||
STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Om de afaceri
|
||||
STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Întreprinzător
|
||||
@ -1533,6 +1534,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Pe partea stân
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Pe partea dreaptă
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotaţie hartă înălţimi: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Alegeți modul în care imaginea hărții de înălțime este rotită pentru a se potrivi în lumea jocului
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Spre stânga
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Spre dreapta
|
||||
@ -1653,7 +1655,11 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Activează folo
|
||||
STR_CONFIG_SETTING_LOADING_INDICATORS :Foloseşte indicatorii de încărcare: {STRING}
|
||||
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Alege dacă indicatori de încărcare sunt afișați deasupra unor vehicule care sunt în proces de încărcare sau descărcare
|
||||
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE :Unități de timp pentru orare: {STRING}
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Selectați unitățile de timp utilizate pentru orarele vehiculelor
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Zile
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Secunde
|
||||
|
||||
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Afișează plecările și sosirile din orare: {STRING}
|
||||
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Arată timpii estimați de plecare și sosire din orar
|
||||
@ -3197,11 +3203,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Mărime
|
||||
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Alege mărimea hărții folosind ca unitate de măsură suprafețele. Numărul de suprafețe disponibile va fi puțin mai mic decât această valoare
|
||||
STR_MAPGEN_BY :{BLACK}*
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nr. de oraşe:
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Selectați densitatea orașelor sau un număr personalizat
|
||||
STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Numele orașelor:
|
||||
STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Alege naţionalitatea numelor oraşelor
|
||||
STR_MAPGEN_DATE :{BLACK}Data:
|
||||
STR_MAPGEN_DATE_TOOLTIP :{BLACK}Selectați data de începere
|
||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Nr. de industrii:
|
||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Selectați densitatea industriilor sau un număr personalizat
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Cel mai înalt vârf:
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Alegeți cel mai înalt vârf pe care jocul va încerca să îl creeze, măsurat în altitudine deasupra nivelului mării
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Crește cu o unitate înălțimea maximă a celui mai înalt vârf al hărții
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Redu cu o unitate înălțimea maximă a celui mai înalt vârf al hărții
|
||||
STR_MAPGEN_SNOW_COVERAGE :{BLACK}Acoperire cu zăpadă:
|
||||
@ -3214,10 +3224,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Reduce
|
||||
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||
STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tip teren:
|
||||
STR_MAPGEN_SEA_LEVEL :{BLACK}Nivelul mării:
|
||||
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Selectați nivelul mării
|
||||
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Râuri:
|
||||
STR_MAPGEN_SMOOTHNESS :{BLACK}Netezime:
|
||||
STR_MAPGEN_VARIETY :{BLACK}Distribuţia varietăţii:
|
||||
STR_MAPGEN_GENERATE :{WHITE}Generează
|
||||
STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Creează lumea și joacă OpenTTD!
|
||||
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Setări NewGRF
|
||||
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Afişează setările NewGRF
|
||||
STR_MAPGEN_AI_SETTINGS :{BLACK}Configurație AI
|
||||
@ -3250,6 +3262,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalană
|
||||
|
||||
# Strings for map borders at game generation
|
||||
STR_MAPGEN_BORDER_TYPE :{BLACK}Margine:
|
||||
STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Alegeți granițele lumii jocului
|
||||
STR_MAPGEN_NORTHWEST :{BLACK}Nord-vest
|
||||
STR_MAPGEN_NORTHEAST :{BLACK}Nord-est
|
||||
STR_MAPGEN_SOUTHEAST :{BLACK}Sud-est
|
||||
@ -3262,7 +3275,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual
|
||||
|
||||
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotaţie hartă înălţimi:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nume hartă înălţimi:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Numele fișierului al hărții de înălțime
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Dimensiune:
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Dimensiunea imaginii hărții de înălțime. Pentru cele mai bune rezultate, fiecare margine ar trebui să se potrivească cu o lungime disponibilă a marginii hărții în OpenTTD, cum ar fi 256, 512, 1024 etc.
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
|
||||
|
||||
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Înălțimea maximă dorită
|
||||
@ -3277,6 +3292,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Teren pl
|
||||
STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generează un teren plat
|
||||
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Teren aleator
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Înălţimea terenului plat:
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Alegeți înălțimea terenului deasupra nivelului mării
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mută înălţimea terenului plat cu o unitate în jos
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mută înălţimea terenului plat cu o unitate în sus
|
||||
|
||||
@ -4570,8 +4586,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Acest ve
|
||||
STR_TIMETABLE_STATUS_LATE :{BLACK}Vehiculul are întârziere de {STRING}
|
||||
STR_TIMETABLE_STATUS_EARLY :{BLACK}Momentan, acest vehicul și-a devansat programul {STRING}
|
||||
STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Acest orar nu a început încă
|
||||
STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Acest orar va începe la {STRING}
|
||||
STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Acest orar va începe în {COMMA} secunde
|
||||
|
||||
STR_TIMETABLE_START :{BLACK}Începe orarul
|
||||
STR_TIMETABLE_START_TOOLTIP :{BLACK}Selectați când începe acest orar. Ctrl+Click distribuie uniform pornirea tuturor vehiculelor care partajează această comandă pe baza ordinii lor relative, dacă comanda este complet programată
|
||||
|
||||
STR_TIMETABLE_START_SECONDS_QUERY :Secunde până la începerea orarului
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Modifică timpul
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modificați timpul pe care ar trebui să o dureze comanda evidențiată. Ctrl+Click setează ora pentru toate comenzile
|
||||
@ -4595,6 +4616,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Estimat
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}Planificat
|
||||
STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Comută între estimare şi orar
|
||||
|
||||
STR_TIMETABLE_ARRIVAL_DATE :S: {COLOUR}{DATE_TINY}
|
||||
STR_TIMETABLE_DEPARTURE_DATE :P: {COLOUR}{DATE_TINY}
|
||||
STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :S: {COLOUR}{COMMA} sec
|
||||
STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :P: {COLOUR}{COMMA} sec
|
||||
|
||||
|
||||
# Date window (for timetable)
|
||||
@ -4698,8 +4723,11 @@ STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Reveniț
|
||||
STR_TEXTFILE_WRAP_TEXT :{WHITE}Încadrează textul
|
||||
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Încadrează textul ferestrei ca să fie vizibil integral, fără derulare
|
||||
STR_TEXTFILE_VIEW_README :{BLACK}Vezi fișierul readme
|
||||
STR_TEXTFILE_VIEW_README_TOOLTIP :Vizualizați "citiți-mă / readme" pentru acest conținut
|
||||
STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Listă modificări
|
||||
STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Vizualizați jurnalul de modificări pentru acest conținut
|
||||
STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licenţă
|
||||
STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Vedeți licența pentru acest conținut
|
||||
###length 5
|
||||
STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}, fișier readme al {STRING}
|
||||
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING}, lista de modificări a {STRING}
|
||||
|
@ -1259,8 +1259,8 @@ STR_NUM_VERY_LOW :Очень ма
|
||||
STR_NUM_LOW :Малое
|
||||
STR_NUM_NORMAL :Среднее
|
||||
STR_NUM_HIGH :Большое
|
||||
STR_NUM_CUSTOM :Указанное
|
||||
STR_NUM_CUSTOM_NUMBER :Заданный ({NUM})
|
||||
STR_NUM_CUSTOM :Указанное...
|
||||
STR_NUM_CUSTOM_NUMBER :Указанное: {NUM}
|
||||
|
||||
STR_VARIETY_NONE :Нет
|
||||
STR_VARIETY_VERY_LOW :Очень низкое
|
||||
@ -1285,8 +1285,8 @@ STR_SEA_LEVEL_MEDIUM :Среднее
|
||||
STR_SEA_LEVEL_MEDIUM.p :Средние
|
||||
STR_SEA_LEVEL_HIGH :Большое
|
||||
STR_SEA_LEVEL_HIGH.p :Высокие
|
||||
STR_SEA_LEVEL_CUSTOM :Заданный
|
||||
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Заданный ({NUM}%)
|
||||
STR_SEA_LEVEL_CUSTOM :Заданное...
|
||||
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Заданное: {NUM}%
|
||||
|
||||
###length 4
|
||||
STR_RIVERS_NONE :Нет
|
||||
@ -1317,8 +1317,8 @@ STR_TERRAIN_TYPE_FLAT :Равнинн
|
||||
STR_TERRAIN_TYPE_HILLY :Холмистый
|
||||
STR_TERRAIN_TYPE_MOUNTAINOUS :Преимущественно горный
|
||||
STR_TERRAIN_TYPE_ALPINIST :Исключительно горный
|
||||
STR_TERRAIN_TYPE_CUSTOM :Установить высоту вручную
|
||||
STR_TERRAIN_TYPE_CUSTOM_VALUE :Установленная высота ({NUM})
|
||||
STR_TERRAIN_TYPE_CUSTOM :Указанная высота...
|
||||
STR_TERRAIN_TYPE_CUSTOM_VALUE :Указанная высота: {NUM}
|
||||
|
||||
###length 4
|
||||
STR_CITY_APPROVAL_LENIENT :снисходительное
|
||||
@ -2281,10 +2281,10 @@ STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Нача
|
||||
STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Создать собственный сценарий
|
||||
STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Начать сетевую игру
|
||||
|
||||
STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Выбрать умеренный климат
|
||||
STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Выбрать субарктический климат
|
||||
STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Выбрать субтропический климат
|
||||
STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Выбрать игрушечный мир
|
||||
STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Умеренный климат
|
||||
STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Субарктический климат
|
||||
STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Субтропический климат
|
||||
STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Детский мир
|
||||
|
||||
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Изменить основные настройки игры
|
||||
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Показать таблицу рекордов
|
||||
@ -3404,8 +3404,8 @@ STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Увел
|
||||
STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Уменьшить площадь песчаного покрытия на 10%
|
||||
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||
STR_MAPGEN_TERRAIN_TYPE :{BLACK}Тип ландшафта:
|
||||
STR_MAPGEN_SEA_LEVEL :{BLACK}Количество морей и озёр:
|
||||
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Выберите значение уровня моря
|
||||
STR_MAPGEN_SEA_LEVEL :{BLACK}Количество водоёмов:
|
||||
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Выберите количество морей и озёр на карте
|
||||
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Количество рек:
|
||||
STR_MAPGEN_SMOOTHNESS :{BLACK}Грубость ландшафта:
|
||||
STR_MAPGEN_VARIETY :{BLACK}Разнообразие ландшафта:
|
||||
@ -4799,7 +4799,7 @@ STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Изме
|
||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Сбросить огранич. скорости
|
||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Сбросить ограничение скорости движения для выделенного задания. Ctrl+щелчок - сбросить время для всех заданий.
|
||||
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}Сбросить счетчик опозд.
|
||||
STR_TIMETABLE_RESET_LATENESS :{BLACK}Сбросить счётчик опозд.
|
||||
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Сбросить счётчик опоздания, чтобы ТС считалось идущим по графику. Ctrl+щелчок сбросит счётчики у всей группы, так что последнее ТС будет идти по графику, а остальные - раньше графика.
|
||||
|
||||
STR_TIMETABLE_AUTOFILL :{BLACK}Авторасчёт
|
||||
|
@ -255,6 +255,9 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP}
|
||||
STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}米
|
||||
STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}米
|
||||
|
||||
STR_UNITS_DAYS :{COMMA}{NBSP} 日
|
||||
STR_UNITS_SECONDS :{COMMA}{NBSP} 秒
|
||||
STR_UNITS_TICKS :{COMMA}{NBSP} 刻
|
||||
|
||||
# Common window strings
|
||||
STR_LIST_FILTER_TITLE :{BLACK}关键字词:
|
||||
@ -719,6 +722,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}点击
|
||||
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}点击音乐曲目以从当前播放列表中删除{}(仅限自定义1或自定义2)
|
||||
|
||||
# Highscore window
|
||||
STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}顶级公司
|
||||
STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}.
|
||||
STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :运输个体户
|
||||
STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :运输代理商
|
||||
@ -1072,6 +1076,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}基础
|
||||
STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}选择要使用的基础音乐组
|
||||
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}有关基础音乐组的附加信息
|
||||
|
||||
STR_BASESET_STATUS :{STRING} {RED}(共有{NUM}份缺失或损坏的文件)
|
||||
|
||||
STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}无法撷取可用的屏幕分辨率清单
|
||||
STR_ERROR_FULLSCREEN_FAILED :{WHITE}无法切换到全屏模式{}尝试使用不同的分辨率
|
||||
@ -1486,7 +1491,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :原始算法
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :新算法
|
||||
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE :地貌类型: {STRING}
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(仅限生成地图时) 多丘陵地形
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :选择生成地图的起伏度
|
||||
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY :工业布局: {STRING}
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :设置地图生成过程中,工业数量及一、二级工业比例。
|
||||
@ -1498,15 +1503,15 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :雪线高度:
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :控制在寒带气候中雪线高度。大雪会影响工业和城镇发展需求。只能在场景编辑器中更改或由“积雪覆盖率”计算得到。
|
||||
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE :积雪覆盖率:{STRING}
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :控制寒带气候中大致的雪量。雪会影响工业和城镇发展需求。只在地图生成时使用。海平面以上一格的土地永远没有积雪
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :控制寒带气候中大致的雪量。雪会影响工业和城镇发展需求。只在地图生成时使用。海岸线上的土地永远没有积雪
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
|
||||
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE :沙漠覆盖率:{STRING}
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :控制热带气候中大致的沙漠量。沙漠会影响工业生成。只在地图生成时使用
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :控制热带气候中大致的沙漠量。沙漠会影响工业生成和城镇发展需求。只在地图生成时有效
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
|
||||
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :地面粗糙度 (仅限生成地图时):{STRING}
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(仅限新算法) 选择在地图上的山丘密度。光滑的地形会包含较少、相互之间较分散的山丘。粗糙的地形的山丘较密集,但可能会使地图显得重复
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :选择在地图上的山丘密度。光滑的地形会包含较少且相互之间较分散的山丘;粗糙的地形的山丘较密集,但可能会使地图显得重复
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :非常光滑
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :光滑
|
||||
@ -1514,7 +1519,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :粗糙
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :非常粗糙
|
||||
|
||||
STR_CONFIG_SETTING_VARIETY :多样的分发: {STRING}
|
||||
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(仅限新算法) 此设置控制地图是否同时包含多山及平坦的地带。由于此设置只会使地图的一部份変得较平坦,请把其他相关设置(如 "地形特点")的值设为 "山地"
|
||||
STR_CONFIG_SETTING_VARIETY_HELPTEXT :此设置控制地图是否同时包含多山及平坦的地带。由于此设置只会使地图的一部份変得较平坦,请把其他相关设置(如 "地形特点")的值设为 "山地"
|
||||
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT :河流数量: {STRING}
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :选择生成河流的数量
|
||||
@ -1534,6 +1539,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :左侧通行
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :右侧通行
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :高度图旋转:{STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :选择高度图旋转的方向以创建地图
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :逆时针
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :顺时针
|
||||
@ -1654,7 +1660,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :允许使用高
|
||||
STR_CONFIG_SETTING_LOADING_INDICATORS :使用装货进度指示: {STRING}
|
||||
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :选择是否在车辆上方显示装卸货物进度
|
||||
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE :时刻表使用的时间单位: {STRING}
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :选择载具时刻表所使用的时间单位
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :日
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :秒
|
||||
STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :刻
|
||||
|
||||
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :在时刻表中显示到达时间和出发时间: {STRING}
|
||||
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :在时刻表中显示预期的到达和出发时间
|
||||
@ -1956,7 +1967,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :游戏开局时
|
||||
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :每 {STRING} 更新货物分配
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :两次连结图的重新计算间隔。每次重新计算会计算图中一个部分的计划。这意味着填入的值X不意味着整张图会每X秒更新一次,只有其中的一部分会被更新。此设定赋值越小,则更多的CPU时间会被用来重新计算。此设定赋值越大,则在线路改变时货物再分配所需时间会变长。
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :花费 {STRING} 在货物分配的重新计算上
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :在货物分配的重新计算上花费 {STRING}
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :每一个连结图的重新计算时间。当一次重新计算开始,一个线程会被允许运行这个秒数。此设定赋值越小,则线程无法按时结束的可能性越大,从而导致游戏运行延迟。此设定赋值越大,则在线路改变时货物再分配所需时间会变长。
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :乗客分配方式:{STRING}
|
||||
@ -3198,11 +3209,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}地图
|
||||
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}选择地图尺寸(单位:格)。可用的数值会略小。
|
||||
STR_MAPGEN_BY :{BLACK}*
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}城镇数量:
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}选择城镇密度,或者输入一个自定义数字
|
||||
STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}城镇名称:
|
||||
STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}选择城镇名称的命名风格
|
||||
STR_MAPGEN_DATE :{BLACK}日期:
|
||||
STR_MAPGEN_DATE_TOOLTIP :{BLACK}选择起始日期
|
||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}工业数量:
|
||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}选择工业密度,或者输入一个自定义数字
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}最高峰:
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}选择游戏地图中最高峰的海拔,以海平面为原点计。
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}提高最高峰的最大高度一格
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}降低最高峰的最大高度一格
|
||||
STR_MAPGEN_SNOW_COVERAGE :{BLACK}积雪覆盖率:
|
||||
@ -3215,10 +3230,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}减少 1
|
||||
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||
STR_MAPGEN_TERRAIN_TYPE :{BLACK}地形特点:
|
||||
STR_MAPGEN_SEA_LEVEL :{BLACK}海洋面积:
|
||||
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK} 选择覆盖率
|
||||
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}河流数量:
|
||||
STR_MAPGEN_SMOOTHNESS :{BLACK}平滑度:
|
||||
STR_MAPGEN_VARIETY :{BLACK}多样的分发:
|
||||
STR_MAPGEN_GENERATE :{WHITE}生成
|
||||
STR_MAPGEN_GENERATE_TOOLTIP :{BLACK} 创建世界并开始游玩OpenTTD!
|
||||
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF设置
|
||||
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}显示NewGRF设置
|
||||
STR_MAPGEN_AI_SETTINGS :{BLACK}AI 设置
|
||||
@ -3251,6 +3268,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :加泰罗尼亚
|
||||
|
||||
# Strings for map borders at game generation
|
||||
STR_MAPGEN_BORDER_TYPE :{BLACK}地图边缘:
|
||||
STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}选择地图边界的样式
|
||||
STR_MAPGEN_NORTHWEST :{BLACK}西北
|
||||
STR_MAPGEN_NORTHEAST :{BLACK}东北
|
||||
STR_MAPGEN_SOUTHEAST :{BLACK}东南
|
||||
@ -3263,7 +3281,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}手动
|
||||
|
||||
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}高度图旋转:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}高度图名称:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}高度图图像文件的名字
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}地图尺寸:
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}高度图的长宽大小。建议选择长宽符合游戏地图大小的图片作为高度图,如256、512、1024等
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} × {NUM}
|
||||
|
||||
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}最高峰目标高度
|
||||
@ -3278,6 +3298,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}平坦
|
||||
STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}生成平坦水面
|
||||
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}随机地面
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}地面高度:
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}选择地面海拔高度
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}提升地面高度
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}降低地面高度
|
||||
|
||||
@ -3303,7 +3324,7 @@ STR_GENERATION_PREPARING_GAME :{BLACK}准备
|
||||
# NewGRF settings
|
||||
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}NewGRF 设置
|
||||
STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}NewGRF 详细信息
|
||||
STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}激活 NewGRF
|
||||
STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}已激活 NewGRF
|
||||
STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}停用 NewGRF
|
||||
STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}选择预设
|
||||
STR_NEWGRF_FILTER_TITLE :{ORANGE}关键字词搜索:
|
||||
@ -4571,8 +4592,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}该车
|
||||
STR_TIMETABLE_STATUS_LATE :{BLACK}该车辆目前晚点 {STRING}
|
||||
STR_TIMETABLE_STATUS_EARLY :{BLACK}该车辆目前提前 {STRING}
|
||||
STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}此时刻表尚未开始
|
||||
STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}本时刻表将在 {STRING} 开始
|
||||
STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}本时刻表将会在 {COMMA} 秒内开始
|
||||
|
||||
STR_TIMETABLE_START :{BLACK}开始时刻表
|
||||
STR_TIMETABLE_START_TOOLTIP :{BLACK}选择此时刻表开始的时间。如果订单完全按时刻表安排,则按住Ctrl键并单击会根据它们的相对顺序,且均匀分配共享此订单的所有车辆的开始时间。
|
||||
|
||||
STR_TIMETABLE_START_SECONDS_QUERY :直至时刻表开始的秒数
|
||||
|
||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}改变时间
|
||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}改变高亮选择的命令执行的时间,按住Ctrl单击可为所有命令设置时间
|
||||
@ -4596,6 +4622,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}预期
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}表定时间
|
||||
STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}切换显示(根据实际情况计算的)预期时间或表定时间
|
||||
|
||||
STR_TIMETABLE_ARRIVAL_DATE :抵: {COLOUR}{DATE_TINY}
|
||||
STR_TIMETABLE_DEPARTURE_DATE :发:{COLOUR}{DATE_TINY}
|
||||
STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :抵: {COLOUR}{COMMA} 秒
|
||||
STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :发: {COLOUR}{COMMA} 秒
|
||||
|
||||
|
||||
# Date window (for timetable)
|
||||
|
@ -67,7 +67,7 @@ static std::string GetLastErrorAsString()
|
||||
DWORD error_code = GetLastError();
|
||||
|
||||
if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS, GetModuleHandleA("winhttp.dll"), error_code,
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, sizeof(buffer), NULL) == 0) {
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, sizeof(buffer), nullptr) == 0) {
|
||||
return fmt::format("unknown error {}", error_code);
|
||||
}
|
||||
|
||||
|
@ -81,8 +81,8 @@ const char *NetworkError::AsString() const
|
||||
if (this->message.empty()) {
|
||||
#if defined(_WIN32)
|
||||
char buffer[512];
|
||||
if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, this->error,
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, sizeof(buffer), NULL) == 0) {
|
||||
if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, this->error,
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, sizeof(buffer), nullptr) == 0) {
|
||||
seprintf(buffer, lastof(buffer), "Unknown error %d", this->error);
|
||||
}
|
||||
this->message.assign(buffer);
|
||||
|
296
src/palette.cpp
Normal file
296
src/palette.cpp
Normal file
@ -0,0 +1,296 @@
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file palette.cpp Handling of palettes. */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "blitter/base.hpp"
|
||||
#include "blitter/factory.hpp"
|
||||
#include "fileio_func.h"
|
||||
#include "gfx_type.h"
|
||||
#include "landscape_type.h"
|
||||
#include "palette_func.h"
|
||||
#include "settings_type.h"
|
||||
#include "thread.h"
|
||||
#include "core/mem_func.hpp"
|
||||
|
||||
#include "table/palettes.h"
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
Palette _cur_palette;
|
||||
std::mutex _cur_palette_mutex;
|
||||
|
||||
byte _colour_gradient[COLOUR_END][8];
|
||||
|
||||
byte _colour_value[COLOUR_END] = {
|
||||
133, // COLOUR_DARK_BLUE
|
||||
99, // COLOUR_PALE_GREEN,
|
||||
48, // COLOUR_PINK,
|
||||
68, // COLOUR_YELLOW,
|
||||
184, // COLOUR_RED,
|
||||
152, // COLOUR_LIGHT_BLUE,
|
||||
209, // COLOUR_GREEN,
|
||||
95, // COLOUR_DARK_GREEN,
|
||||
150, // COLOUR_BLUE,
|
||||
79, // COLOUR_CREAM,
|
||||
134, // COLOUR_MAUVE,
|
||||
174, // COLOUR_PURPLE,
|
||||
195, // COLOUR_ORANGE,
|
||||
116, // COLOUR_BROWN,
|
||||
6, // COLOUR_GREY,
|
||||
15, // COLOUR_WHITE,
|
||||
};
|
||||
|
||||
Colour _water_palette[10];
|
||||
|
||||
/**
|
||||
* PALETTE_BITS reduces the bits-per-channel of 32bpp graphics data to allow faster palette lookups from
|
||||
* a smaller lookup table.
|
||||
*
|
||||
* 6 bpc is chosen as this results in a palette lookup table of 256KiB with adequate fidelty.
|
||||
* In constract, a 5 bpc lookup table would be 32KiB, and 7 bpc would be 2MiB.
|
||||
*
|
||||
* Values in the table are filled as they are first encountered -- larger lookup table means more colour
|
||||
* distance calculations, and is therefore slower.
|
||||
*/
|
||||
const uint PALETTE_BITS = 6;
|
||||
const uint PALETTE_SHIFT = 8 - PALETTE_BITS;
|
||||
const uint PALETTE_BITS_MASK = ((1U << PALETTE_BITS) - 1) << PALETTE_SHIFT;
|
||||
const uint PALETTE_BITS_OR = (1U << (PALETTE_SHIFT - 1));
|
||||
|
||||
/* Palette and reshade lookup table. */
|
||||
using PaletteLookup = std::array<uint8_t, 1U << (PALETTE_BITS * 3)>;
|
||||
static PaletteLookup _palette_lookup{};
|
||||
|
||||
/**
|
||||
* Reduce bits per channel to PALETTE_BITS, and place value in the middle of the reduced range.
|
||||
* This is to counteract the information lost between bright and dark pixels, e.g if PALETTE_BITS was 2:
|
||||
* 0 - 63 -> 32
|
||||
* 64 - 127 -> 96
|
||||
* 128 - 191 -> 160
|
||||
* 192 - 255 -> 224
|
||||
* @param c 8 bit colour component.
|
||||
* @returns Colour component reduced to PALETTE_BITS.
|
||||
*/
|
||||
inline uint CrunchColour(uint c)
|
||||
{
|
||||
return (c & PALETTE_BITS_MASK) | PALETTE_BITS_OR;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate distance between two colours.
|
||||
* @param col1 First colour.
|
||||
* @param r2 Red component of second colour.
|
||||
* @param g2 Green component of second colour.
|
||||
* @param b2 Blue component of second colour.
|
||||
* @returns Euclidean distance between first and second colour.
|
||||
*/
|
||||
static uint CalculateColourDistance(const Colour &col1, int r2, int g2, int b2)
|
||||
{
|
||||
/* Euclidean colour distance for sRGB based on https://en.wikipedia.org/wiki/Color_difference#sRGB */
|
||||
int r = (int)col1.r - (int)r2;
|
||||
int g = (int)col1.g - (int)g2;
|
||||
int b = (int)col1.b - (int)b2;
|
||||
|
||||
int avgr = (col1.r + r2) / 2;
|
||||
return ((2 + (avgr / 256.0)) * r * r) + (4 * g * g) + ((2 + ((255 - avgr) / 256.0)) * b * b);
|
||||
}
|
||||
|
||||
/* Palette indexes for conversion. See docs/palettes/palette_key.png */
|
||||
const uint8_t PALETTE_INDEX_CC_START = 198; ///< Palette index of start of company colour remap area.
|
||||
const uint8_t PALETTE_INDEX_CC_END = PALETTE_INDEX_CC_START + 8; ///< Palette index of end of company colour remap area.
|
||||
const uint8_t PALETTE_INDEX_START = 1; ///< Palette index of start of defined palette.
|
||||
const uint8_t PALETTE_INDEX_END = 215; ///< Palette index of end of defined palette.
|
||||
|
||||
/**
|
||||
* Find nearest colour palette index for a 32bpp pixel.
|
||||
* @param r Red component.
|
||||
* @param g Green component.
|
||||
* @param b Blue component.
|
||||
* @returns palette index of nearest colour.
|
||||
*/
|
||||
static uint8_t FindNearestColourIndex(uint8_t r, uint8_t g, uint8_t b)
|
||||
{
|
||||
r = CrunchColour(r);
|
||||
g = CrunchColour(g);
|
||||
b = CrunchColour(b);
|
||||
|
||||
uint best_index = 0;
|
||||
uint best_distance = UINT32_MAX;
|
||||
|
||||
for (uint i = PALETTE_INDEX_START; i < PALETTE_INDEX_CC_START; i++) {
|
||||
if (uint distance = CalculateColourDistance(_palette.palette[i], r, g, b); distance < best_distance) {
|
||||
best_index = i;
|
||||
best_distance = distance;
|
||||
}
|
||||
}
|
||||
/* There's a hole in the palette reserved for company colour remaps. */
|
||||
for (uint i = PALETTE_INDEX_CC_END; i < PALETTE_INDEX_END; i++) {
|
||||
if (uint distance = CalculateColourDistance(_palette.palette[i], r, g, b); distance < best_distance) {
|
||||
best_index = i;
|
||||
best_distance = distance;
|
||||
}
|
||||
}
|
||||
return best_index;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get nearest colour palette index from an RGB colour.
|
||||
* A search is performed if this colour is not already in the lookup table.
|
||||
* @param r Red component.
|
||||
* @param g Green component.
|
||||
* @param b Blue component.
|
||||
* @returns nearest colour palette index.
|
||||
*/
|
||||
uint8_t GetNearestColourIndex(uint8_t r, uint8_t g, uint8_t b)
|
||||
{
|
||||
uint32_t key = (r >> PALETTE_SHIFT) | (g >> PALETTE_SHIFT) << PALETTE_BITS | (b >> PALETTE_SHIFT) << (PALETTE_BITS * 2);
|
||||
if (_palette_lookup[key] == 0) _palette_lookup[key] = FindNearestColourIndex(r, g, b);
|
||||
return _palette_lookup[key];
|
||||
}
|
||||
|
||||
void DoPaletteAnimations();
|
||||
|
||||
void GfxInitPalettes()
|
||||
{
|
||||
MemCpyT<Colour>(_water_palette, (_settings_game.game_creation.landscape == LT_TOYLAND) ? _extra_palette_values.dark_water_toyland : _extra_palette_values.dark_water, 5);
|
||||
const Colour *s = (_settings_game.game_creation.landscape == LT_TOYLAND) ? _extra_palette_values.glitter_water_toyland : _extra_palette_values.glitter_water;
|
||||
for (int i = 0; i < 5; i++) {
|
||||
_water_palette[i + 5] = s[i * 3];
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> lock_state(_cur_palette_mutex);
|
||||
memcpy(&_cur_palette, &_palette, sizeof(_cur_palette));
|
||||
DoPaletteAnimations();
|
||||
}
|
||||
|
||||
#define EXTR(p, q) (((uint16_t)(palette_animation_counter * (p)) * (q)) >> 16)
|
||||
#define EXTR2(p, q) (((uint16_t)(~palette_animation_counter * (p)) * (q)) >> 16)
|
||||
|
||||
void DoPaletteAnimations()
|
||||
{
|
||||
/* Animation counter for the palette animation. */
|
||||
static int palette_animation_counter = 0;
|
||||
palette_animation_counter += 8;
|
||||
|
||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||
const Colour *s;
|
||||
const ExtraPaletteValues *ev = &_extra_palette_values;
|
||||
Colour old_val[PALETTE_ANIM_SIZE];
|
||||
const uint old_tc = palette_animation_counter;
|
||||
uint j;
|
||||
|
||||
if (blitter != nullptr && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
|
||||
palette_animation_counter = 0;
|
||||
}
|
||||
|
||||
Colour *palette_pos = &_cur_palette.palette[PALETTE_ANIM_START]; // Points to where animations are taking place on the palette
|
||||
/* Makes a copy of the current animation palette in old_val,
|
||||
* so the work on the current palette could be compared, see if there has been any changes */
|
||||
memcpy(old_val, palette_pos, sizeof(old_val));
|
||||
|
||||
/* Fizzy Drink bubbles animation */
|
||||
s = ev->fizzy_drink;
|
||||
j = EXTR2(512, EPV_CYCLES_FIZZY_DRINK);
|
||||
for (uint i = 0; i != EPV_CYCLES_FIZZY_DRINK; i++) {
|
||||
*palette_pos++ = s[j];
|
||||
j++;
|
||||
if (j == EPV_CYCLES_FIZZY_DRINK) j = 0;
|
||||
}
|
||||
|
||||
/* Oil refinery fire animation */
|
||||
s = ev->oil_refinery;
|
||||
j = EXTR2(512, EPV_CYCLES_OIL_REFINERY);
|
||||
for (uint i = 0; i != EPV_CYCLES_OIL_REFINERY; i++) {
|
||||
*palette_pos++ = s[j];
|
||||
j++;
|
||||
if (j == EPV_CYCLES_OIL_REFINERY) j = 0;
|
||||
}
|
||||
|
||||
/* Radio tower blinking */
|
||||
{
|
||||
byte i = (palette_animation_counter >> 1) & 0x7F;
|
||||
byte v;
|
||||
|
||||
if (i < 0x3f) {
|
||||
v = 255;
|
||||
} else if (i < 0x4A || i >= 0x75) {
|
||||
v = 128;
|
||||
} else {
|
||||
v = 20;
|
||||
}
|
||||
palette_pos->r = v;
|
||||
palette_pos->g = 0;
|
||||
palette_pos->b = 0;
|
||||
palette_pos++;
|
||||
|
||||
i ^= 0x40;
|
||||
if (i < 0x3f) {
|
||||
v = 255;
|
||||
} else if (i < 0x4A || i >= 0x75) {
|
||||
v = 128;
|
||||
} else {
|
||||
v = 20;
|
||||
}
|
||||
palette_pos->r = v;
|
||||
palette_pos->g = 0;
|
||||
palette_pos->b = 0;
|
||||
palette_pos++;
|
||||
}
|
||||
|
||||
/* Handle lighthouse and stadium animation */
|
||||
s = ev->lighthouse;
|
||||
j = EXTR(256, EPV_CYCLES_LIGHTHOUSE);
|
||||
for (uint i = 0; i != EPV_CYCLES_LIGHTHOUSE; i++) {
|
||||
*palette_pos++ = s[j];
|
||||
j++;
|
||||
if (j == EPV_CYCLES_LIGHTHOUSE) j = 0;
|
||||
}
|
||||
|
||||
/* Dark blue water */
|
||||
s = (_settings_game.game_creation.landscape == LT_TOYLAND) ? ev->dark_water_toyland : ev->dark_water;
|
||||
j = EXTR(320, EPV_CYCLES_DARK_WATER);
|
||||
for (uint i = 0; i != EPV_CYCLES_DARK_WATER; i++) {
|
||||
*palette_pos++ = s[j];
|
||||
j++;
|
||||
if (j == EPV_CYCLES_DARK_WATER) j = 0;
|
||||
}
|
||||
|
||||
/* Glittery water */
|
||||
s = (_settings_game.game_creation.landscape == LT_TOYLAND) ? ev->glitter_water_toyland : ev->glitter_water;
|
||||
j = EXTR(128, EPV_CYCLES_GLITTER_WATER);
|
||||
for (uint i = 0; i != EPV_CYCLES_GLITTER_WATER / 3; i++) {
|
||||
*palette_pos++ = s[j];
|
||||
j += 3;
|
||||
if (j >= EPV_CYCLES_GLITTER_WATER) j -= EPV_CYCLES_GLITTER_WATER;
|
||||
}
|
||||
|
||||
if (blitter != nullptr && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
|
||||
palette_animation_counter = old_tc;
|
||||
} else if (_cur_palette.count_dirty == 0 && memcmp(old_val, &_cur_palette.palette[PALETTE_ANIM_START], sizeof(old_val)) != 0) {
|
||||
/* Did we changed anything on the palette? Seems so. Mark it as dirty */
|
||||
_cur_palette.first_dirty = PALETTE_ANIM_START;
|
||||
_cur_palette.count_dirty = PALETTE_ANIM_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine a contrasty text colour for a coloured background.
|
||||
* @param background Background colour.
|
||||
* @param threshold Background colour brightness threshold below which the background is considered dark and TC_WHITE is returned, range: 0 - 255, default 128.
|
||||
* @return TC_BLACK or TC_WHITE depending on what gives a better contrast.
|
||||
*/
|
||||
TextColour GetContrastColour(uint8_t background, uint8_t threshold)
|
||||
{
|
||||
Colour c = _cur_palette.palette[background];
|
||||
/* Compute brightness according to http://www.w3.org/TR/AERT#color-contrast.
|
||||
* The following formula computes 1000 * brightness^2, with brightness being in range 0 to 255. */
|
||||
uint sq1000_brightness = c.r * c.r * 299 + c.g * c.g * 587 + c.b * c.b * 114;
|
||||
/* Compare with threshold brightness which defaults to 128 (50%) */
|
||||
return sq1000_brightness < ((uint) threshold) * ((uint) threshold) * 1000 ? TC_WHITE : TC_BLACK;
|
||||
}
|
84
src/palette_func.h
Normal file
84
src/palette_func.h
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file palette_func.h Functions related to palettes. */
|
||||
|
||||
#ifndef PALETTE_FUNC_H
|
||||
#define PALETTE_FUNC_H
|
||||
|
||||
#include "gfx_type.h"
|
||||
|
||||
extern Palette _cur_palette; ///< Current palette
|
||||
|
||||
void GfxInitPalettes();
|
||||
|
||||
uint8_t GetNearestColourIndex(uint8_t r, uint8_t g, uint8_t b);
|
||||
|
||||
static inline uint8_t GetNearestColourIndex(const Colour colour)
|
||||
{
|
||||
return GetNearestColourIndex(colour.r, colour.g, colour.b);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a Colours value is valid.
|
||||
*
|
||||
* @param colours The value to check
|
||||
* @return true if the given value is a valid Colours.
|
||||
*/
|
||||
static inline bool IsValidColours(Colours colours)
|
||||
{
|
||||
return colours < COLOUR_END;
|
||||
}
|
||||
|
||||
TextColour GetContrastColour(uint8_t background, uint8_t threshold = 128);
|
||||
|
||||
/**
|
||||
* All 16 colour gradients
|
||||
* 8 colours per gradient from darkest (0) to lightest (7)
|
||||
*/
|
||||
extern byte _colour_gradient[COLOUR_END][8];
|
||||
extern byte _colour_value[COLOUR_END];
|
||||
|
||||
/**
|
||||
* Return the colour for a particular greyscale level.
|
||||
* @param level Intensity, 0 = black, 15 = white
|
||||
* @return colour
|
||||
*/
|
||||
#define GREY_SCALE(level) (level)
|
||||
|
||||
static const uint8_t PC_BLACK = GREY_SCALE(1); ///< Black palette colour.
|
||||
static const uint8_t PC_DARK_GREY = GREY_SCALE(6); ///< Dark grey palette colour.
|
||||
static const uint8_t PC_GREY = GREY_SCALE(10); ///< Grey palette colour.
|
||||
static const uint8_t PC_WHITE = GREY_SCALE(15); ///< White palette colour.
|
||||
|
||||
static const uint8_t PC_VERY_DARK_RED = 0xB2; ///< Almost-black red palette colour.
|
||||
static const uint8_t PC_DARK_RED = 0xB4; ///< Dark red palette colour.
|
||||
static const uint8_t PC_RED = 0xB8; ///< Red palette colour.
|
||||
|
||||
static const uint8_t PC_VERY_DARK_BROWN = 0x56; ///< Almost-black brown palette colour.
|
||||
|
||||
static const uint8_t PC_ORANGE = 0xC2; ///< Orange palette colour.
|
||||
|
||||
static const uint8_t PC_YELLOW = 0xBF; ///< Yellow palette colour.
|
||||
static const uint8_t PC_LIGHT_YELLOW = 0x44; ///< Light yellow palette colour.
|
||||
static const uint8_t PC_VERY_LIGHT_YELLOW = 0x45; ///< Almost-white yellow palette colour.
|
||||
|
||||
static const uint8_t PC_GREEN = 0xD0; ///< Green palette colour.
|
||||
|
||||
static const uint8_t PC_VERY_DARK_BLUE = 0x9A; ///< Almost-black blue palette colour.
|
||||
static const uint8_t PC_DARK_BLUE = 0x9D; ///< Dark blue palette colour.
|
||||
static const uint8_t PC_LIGHT_BLUE = 0x98; ///< Light blue palette colour.
|
||||
|
||||
static const uint8_t PC_ROUGH_LAND = 0x52; ///< Dark green palette colour for rough land.
|
||||
static const uint8_t PC_GRASS_LAND = 0x54; ///< Dark green palette colour for grass land.
|
||||
static const uint8_t PC_BARE_LAND = 0x37; ///< Brown palette colour for bare land.
|
||||
static const uint8_t PC_RAINFOREST = 0x5C; ///< Pale green palette colour for rainforest.
|
||||
static const uint8_t PC_FIELDS = 0x25; ///< Light brown palette colour for fields.
|
||||
static const uint8_t PC_TREES = 0x57; ///< Green palette colour for trees.
|
||||
static const uint8_t PC_WATER = 0xC9; ///< Dark blue palette colour for water.
|
||||
|
||||
#endif /* PALETTE_FUNC_H */
|
@ -22,6 +22,7 @@
|
||||
#include "../string_func.h"
|
||||
#include "../settings_type.h"
|
||||
#include "../command_func.h"
|
||||
#include "../core/backup_type.hpp"
|
||||
|
||||
#include "script_gui.h"
|
||||
#include "script_log.hpp"
|
||||
@ -817,8 +818,9 @@ struct ScriptDebugWindow : public Window {
|
||||
SetWidgetsDisabledState(!this->show_break_box, WID_SCRD_BREAK_STR_ON_OFF_BTN, WID_SCRD_BREAK_STR_EDIT_BOX, WID_SCRD_MATCH_CASE_BTN);
|
||||
this->hscroll->SetStepSize(10); // Speed up horizontal scrollbar
|
||||
|
||||
/* Restore the break string value from static variable */
|
||||
/* Restore the break string value from static variable, and enable the filter. */
|
||||
this->break_editbox.text.Assign(this->filter.break_string);
|
||||
this->break_string_filter.SetFilterTerm(this->filter.break_string);
|
||||
|
||||
if (show_company == INVALID_COMPANY) {
|
||||
this->SelectValidDebugCompany();
|
||||
@ -915,8 +917,19 @@ struct ScriptDebugWindow : public Window {
|
||||
ScriptLogTypes::LogData &log = this->GetLogData();
|
||||
if (log.empty()) return;
|
||||
|
||||
Rect br = r.Shrink(WidgetDimensions::scaled.bevel);
|
||||
Rect tr = r.Shrink(WidgetDimensions::scaled.framerect);
|
||||
Rect fr = r.Shrink(WidgetDimensions::scaled.framerect);
|
||||
|
||||
/* Setup a clipping rectangle... */
|
||||
DrawPixelInfo tmp_dpi;
|
||||
if (!FillDrawPixelInfo(&tmp_dpi, fr)) return;
|
||||
/* ...but keep coordinates relative to the window. */
|
||||
tmp_dpi.left += fr.left;
|
||||
tmp_dpi.top += fr.top;
|
||||
|
||||
AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi);
|
||||
|
||||
fr.left -= this->hscroll->GetPosition();
|
||||
|
||||
for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && (size_t)i < log.size(); i++) {
|
||||
const ScriptLogTypes::LogLine &line = log[i];
|
||||
|
||||
@ -932,12 +945,13 @@ struct ScriptDebugWindow : public Window {
|
||||
|
||||
/* Check if the current line should be highlighted */
|
||||
if (i == this->highlight_row) {
|
||||
GfxFillRect(br.left, tr.top, br.right, tr.top + this->resize.step_height - 1, PC_BLACK);
|
||||
fr.bottom = fr.top + this->resize.step_height - 1;
|
||||
GfxFillRect(fr, PC_BLACK);
|
||||
if (colour == TC_BLACK) colour = TC_WHITE; // Make black text readable by inverting it to white.
|
||||
}
|
||||
|
||||
DrawString(-this->hscroll->GetPosition(), tr.right, tr.top, line.text, colour, SA_LEFT | SA_FORCE);
|
||||
tr.top += this->resize.step_height;
|
||||
DrawString(fr, line.text, colour, SA_LEFT | SA_FORCE);
|
||||
fr.top += this->resize.step_height;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,16 +10,9 @@
|
||||
#ifndef SMALLMAP_COLOURS_H
|
||||
#define SMALLMAP_COLOURS_H
|
||||
|
||||
#include "palette_func.h"
|
||||
#include "core/endian_func.hpp"
|
||||
|
||||
static const uint8 PC_ROUGH_LAND = 0x52; ///< Dark green palette colour for rough land.
|
||||
static const uint8 PC_GRASS_LAND = 0x54; ///< Dark green palette colour for grass land.
|
||||
static const uint8 PC_BARE_LAND = 0x37; ///< Brown palette colour for bare land.
|
||||
static const uint8 PC_RAINFOREST = 0x5C; ///< Pale green palette colour for rainforest.
|
||||
static const uint8 PC_FIELDS = 0x25; ///< Light brown palette colour for fields.
|
||||
static const uint8 PC_TREES = 0x57; ///< Green palette colour for trees.
|
||||
static const uint8 PC_WATER = 0xC9; ///< Dark blue palette colour for water.
|
||||
|
||||
#define MKCOLOUR(x) TO_LE32X(x)
|
||||
|
||||
#define MKCOLOUR_XXXX(x) (MKCOLOUR(0x01010101) * (uint)(x))
|
||||
|
@ -378,6 +378,19 @@ static bool ResizeSprites(SpriteLoader::SpriteCollection &sprite, unsigned int s
|
||||
{
|
||||
ZoomLevel first_avail = static_cast<ZoomLevel>(FindFirstBit(sprite_avail));
|
||||
ZoomLevel first_needed = static_cast<ZoomLevel>(FindFirstBit(zoom_levels));
|
||||
|
||||
/* Upscale to desired sprite_min_zoom if provided sprite only had zoomed in versions. */
|
||||
if (first_avail < _settings_client.gui.sprite_zoom_min) {
|
||||
const unsigned int below_min_zoom_mask = (1 << _settings_client.gui.sprite_zoom_min) - 1;
|
||||
if ((zoom_levels & below_min_zoom_mask) != 0 && !HasBit(sprite_avail, _settings_client.gui.sprite_zoom_min)) {
|
||||
if (!HasBit(sprite_avail, ZOOM_LVL_OUT_2X)) ResizeSpriteOut(sprite, ZOOM_LVL_OUT_2X, false);
|
||||
if (_settings_client.gui.sprite_zoom_min == ZOOM_LVL_OUT_4X) ResizeSpriteOut(sprite, ZOOM_LVL_OUT_4X, false);
|
||||
sprite_avail &= ~below_min_zoom_mask;
|
||||
SetBit(sprite_avail, _settings_client.gui.sprite_zoom_min);
|
||||
first_avail = _settings_client.gui.sprite_zoom_min;
|
||||
}
|
||||
}
|
||||
|
||||
ZoomLevel start = std::min(first_avail, first_needed);
|
||||
|
||||
bool needed = false;
|
||||
|
@ -665,7 +665,7 @@ void VideoDriver_CocoaQuartz::AllocateBackingStore(bool)
|
||||
kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host
|
||||
);
|
||||
|
||||
assert(this->cgcontext != NULL);
|
||||
assert(this->cgcontext != nullptr);
|
||||
CGContextSetShouldAntialias(this->cgcontext, FALSE);
|
||||
CGContextSetAllowsAntialiasing(this->cgcontext, FALSE);
|
||||
CGContextSetInterpolationQuality(this->cgcontext, kCGInterpolationNone);
|
||||
|
@ -932,16 +932,16 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||
|
||||
NSString *s = [ aString isKindOfClass:[ NSAttributedString class ] ] ? [ aString string ] : (NSString *)aString;
|
||||
|
||||
const char *insert_point = NULL;
|
||||
const char *replace_range = NULL;
|
||||
const char *insert_point = nullptr;
|
||||
const char *replace_range = nullptr;
|
||||
if (replacementRange.location != NSNotFound) {
|
||||
/* Calculate the part to be replaced. */
|
||||
insert_point = Utf8AdvanceByUtf16Units(_focused_window->GetFocusedTextbuf()->GetText(), replacementRange.location);
|
||||
replace_range = Utf8AdvanceByUtf16Units(insert_point, replacementRange.length);
|
||||
}
|
||||
|
||||
HandleTextInput(NULL, true);
|
||||
HandleTextInput([ s UTF8String ], false, NULL, insert_point, replace_range);
|
||||
HandleTextInput(nullptr, true);
|
||||
HandleTextInput([ s UTF8String ], false, nullptr, insert_point, replace_range);
|
||||
}
|
||||
|
||||
/** Insert the given text at the caret. */
|
||||
@ -958,9 +958,9 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||
NSString *s = [ aString isKindOfClass:[ NSAttributedString class ] ] ? [ aString string ] : (NSString *)aString;
|
||||
|
||||
const char *utf8 = [ s UTF8String ];
|
||||
if (utf8 != NULL) {
|
||||
const char *insert_point = NULL;
|
||||
const char *replace_range = NULL;
|
||||
if (utf8 != nullptr) {
|
||||
const char *insert_point = nullptr;
|
||||
const char *replace_range = nullptr;
|
||||
if (replacementRange.location != NSNotFound) {
|
||||
/* Calculate the part to be replaced. */
|
||||
NSRange marked = [ self markedRange ];
|
||||
|
@ -277,7 +277,7 @@ static bool DrawIMECompositionString()
|
||||
static void SetCompositionPos(HWND hwnd)
|
||||
{
|
||||
HIMC hIMC = ImmGetContext(hwnd);
|
||||
if (hIMC != NULL) {
|
||||
if (hIMC != nullptr) {
|
||||
COMPOSITIONFORM cf;
|
||||
cf.dwStyle = CFS_POINT;
|
||||
|
||||
@ -299,7 +299,7 @@ static void SetCompositionPos(HWND hwnd)
|
||||
static void SetCandidatePos(HWND hwnd)
|
||||
{
|
||||
HIMC hIMC = ImmGetContext(hwnd);
|
||||
if (hIMC != NULL) {
|
||||
if (hIMC != nullptr) {
|
||||
CANDIDATEFORM cf;
|
||||
cf.dwIndex = 0;
|
||||
cf.dwStyle = CFS_EXCLUDE;
|
||||
@ -334,7 +334,7 @@ static LRESULT HandleIMEComposition(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HIMC hIMC = ImmGetContext(hwnd);
|
||||
|
||||
if (hIMC != NULL) {
|
||||
if (hIMC != nullptr) {
|
||||
if (lParam & GCS_RESULTSTR) {
|
||||
/* Read result string from the IME. */
|
||||
LONG len = ImmGetCompositionString(hIMC, GCS_RESULTSTR, nullptr, 0); // Length is always in bytes, even in UNICODE build.
|
||||
@ -393,7 +393,7 @@ static LRESULT HandleIMEComposition(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
static void CancelIMEComposition(HWND hwnd)
|
||||
{
|
||||
HIMC hIMC = ImmGetContext(hwnd);
|
||||
if (hIMC != NULL) ImmNotifyIME(hIMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
|
||||
if (hIMC != nullptr) ImmNotifyIME(hIMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
|
||||
ImmReleaseContext(hwnd, hIMC);
|
||||
/* Clear any marked string from the current edit box. */
|
||||
HandleTextInput(nullptr, true);
|
||||
@ -690,7 +690,7 @@ LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
/* Resize the window to match the new DPI setting. */
|
||||
RECT *prcNewWindow = (RECT *)lParam;
|
||||
SetWindowPos(hwnd,
|
||||
NULL,
|
||||
nullptr,
|
||||
prcNewWindow->left,
|
||||
prcNewWindow->top,
|
||||
prcNewWindow->right - prcNewWindow->left,
|
||||
|
@ -695,7 +695,7 @@ enum WindowClass {
|
||||
|
||||
/**
|
||||
* Script debug window; %Window numbers:
|
||||
* - 0 = #ScriptDebugWidgets
|
||||
* - Ascending value = #ScriptDebugWidgets
|
||||
*/
|
||||
WC_SCRIPT_DEBUG,
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user