Merge branch 'master' into jgrpp-beta
# Conflicts: # src/company_cmd.cpp # src/economy.cpp # src/lang/swedish.txt # src/network/network_command.cpp # src/news_gui.cpp # src/saveload/saveload.h # src/script/api/script_list.cpp # src/video/cocoa/cocoa_v.mm # src/video/sdl2_v.cpp
This commit is contained in:
17
.github/ISSUE_TEMPLATE/bug.md
vendored
17
.github/ISSUE_TEMPLATE/bug.md
vendored
@@ -1,17 +0,0 @@
|
||||
---
|
||||
name: Bugs
|
||||
about: Found a bug in OpenTTD?
|
||||
title: "Bug Report"
|
||||
---
|
||||
|
||||
## Version of OpenTTD
|
||||
<!-- Fill in below what version of OpenTTD you are using, including your OS. -->
|
||||
|
||||
## Expected result
|
||||
<!-- Describe in a few words what you expected to happen. -->
|
||||
|
||||
## Actual result
|
||||
<!-- Describe in a few words what actually happens. -->
|
||||
|
||||
## Steps to reproduce
|
||||
<!-- As detailed as possible, please tell us how we can reproduce this. Feel free to attach a savegame (zip it first) to make it more clear. -->
|
41
.github/ISSUE_TEMPLATE/bug.yaml
vendored
Normal file
41
.github/ISSUE_TEMPLATE/bug.yaml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
name: Bug Report
|
||||
description: Found a bug in OpenTTD?
|
||||
title: "[Bug]: "
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Version of OpenTTD
|
||||
description: Fill in below what version of OpenTTD you are using, including your OS.
|
||||
placeholder: ex. 1.11.2, Windows 10
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: Expected result
|
||||
description: Describe in a few words what you expected to happen.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: actual
|
||||
attributes:
|
||||
label: Actual result
|
||||
description: Describe in a few words what actually happens.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reproduce
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: As detailed as possible, please tell us how we can reproduce this. Feel free to attach a savegame (zip it first) to make it more clear.
|
||||
placeholder: |
|
||||
1. Loaded the attached savegame.
|
||||
2. Click on the button left of that other icon.
|
||||
3. The window doesn't open.
|
||||
validations:
|
||||
required: true
|
12
.github/ISSUE_TEMPLATE/crash.md
vendored
12
.github/ISSUE_TEMPLATE/crash.md
vendored
@@ -1,12 +0,0 @@
|
||||
---
|
||||
name: Crash
|
||||
about: Did OpenTTD crash?
|
||||
title: "Crash Report"
|
||||
---
|
||||
<!-- Please zip the crash.log, crash.dmp and crash.sav and attach it to this crash report. -->
|
||||
|
||||
## Version of OpenTTD
|
||||
<!-- Fill in below what version of OpenTTD you are using, including your OS. -->
|
||||
|
||||
## Steps to reproduce
|
||||
<!-- Please spend a few words if you can reproduce this problem. -->
|
37
.github/ISSUE_TEMPLATE/crash.yaml
vendored
Normal file
37
.github/ISSUE_TEMPLATE/crash.yaml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
name: Crash
|
||||
description: Did OpenTTD crash?
|
||||
title: "[Crash]: "
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this crash report!
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Version of OpenTTD
|
||||
description: Fill in below what version of OpenTTD you are using, including your OS.
|
||||
placeholder: ex. 1.11.2, Windows 10
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reproduce
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: Please spend a few words if you can reproduce this problem.
|
||||
placeholder: |
|
||||
1. Bought a new train.
|
||||
2. The game crashed.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: crashlogs
|
||||
attributes:
|
||||
label: Upload crash files
|
||||
description: With the `crash.log`, `crash.dmp`, and `crash.sav` we can analyze the crash in detail; this way you allow us to easier triage and fix the problem.
|
||||
placeholder: |
|
||||
1. Zip the `crash.log`, `crash.dmp` and `crash.sav`.
|
||||
2. Click on this field.
|
||||
3. Drag and drop the zip file in here.
|
||||
validations:
|
||||
required: true
|
@@ -28,10 +28,10 @@ endmacro()
|
||||
macro(dump_class_templates NAME)
|
||||
string(REGEX REPLACE "^Script" "" REALNAME ${NAME})
|
||||
|
||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} *GetParam(ForceType<${NAME} *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (${NAME} *)instance; }")
|
||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} &GetParam(ForceType<${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(${NAME} *)instance; }")
|
||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} *GetParam(ForceType<const ${NAME} *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (${NAME} *)instance; }")
|
||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} &GetParam(ForceType<const ${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(${NAME} *)instance; }")
|
||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} *GetParam(ForceType<${NAME} *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, nullptr); return (${NAME} *)instance; }")
|
||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} &GetParam(ForceType<${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, nullptr); return *(${NAME} *)instance; }")
|
||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} *GetParam(ForceType<const ${NAME} *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, nullptr); return (${NAME} *)instance; }")
|
||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} &GetParam(ForceType<const ${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, nullptr); return *(${NAME} *)instance; }")
|
||||
if("${NAME}" STREQUAL "ScriptEvent")
|
||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${NAME} *>(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; }")
|
||||
elseif("${NAME}" STREQUAL "ScriptText")
|
||||
|
@@ -85,6 +85,8 @@
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
z-index: 2;
|
||||
/* OpenTTD draws the cursor itself */
|
||||
cursor: none !important;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
4
src/3rdparty/squirrel/sqstdlib/sqstdaux.cpp
vendored
4
src/3rdparty/squirrel/sqstdlib/sqstdaux.cpp
vendored
@@ -17,7 +17,7 @@ void sqstd_printcallstack(HSQUIRRELVM v)
|
||||
SQFloat f;
|
||||
const SQChar *s;
|
||||
SQInteger level=1; //1 is to skip this function that is level 0
|
||||
const SQChar *name=0;
|
||||
const SQChar *name=nullptr;
|
||||
SQInteger seq=0;
|
||||
pf(v,"\nCALLSTACK\n");
|
||||
while(SQ_SUCCEEDED(sq_stackinfos(v,level,&si)))
|
||||
@@ -116,7 +116,7 @@ static SQInteger _sqstd_aux_printerror(HSQUIRRELVM v)
|
||||
{
|
||||
SQPRINTFUNCTION pf = sq_getprintfunc(v);
|
||||
if(pf) {
|
||||
const SQChar *sErr = 0;
|
||||
const SQChar *sErr = nullptr;
|
||||
if(sq_gettop(v)>=1) {
|
||||
if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr))) {
|
||||
pf(v,"\nAN ERROR HAS OCCURRED [%s]\n",sErr);
|
||||
|
4
src/3rdparty/squirrel/sqstdlib/sqstdmath.cpp
vendored
4
src/3rdparty/squirrel/sqstdlib/sqstdmath.cpp
vendored
@@ -88,7 +88,7 @@ static SQRegFunction mathlib_funcs[] = {
|
||||
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
|
||||
_DECL_FUNC(fabs,2,".n"),
|
||||
_DECL_FUNC(abs,2,".n"),
|
||||
{0,0,0,0},
|
||||
{nullptr,nullptr,0,nullptr},
|
||||
};
|
||||
|
||||
#ifndef M_PI
|
||||
@@ -98,7 +98,7 @@ static SQRegFunction mathlib_funcs[] = {
|
||||
SQRESULT sqstd_register_mathlib(HSQUIRRELVM v)
|
||||
{
|
||||
SQInteger i=0;
|
||||
while(mathlib_funcs[i].name!=0) {
|
||||
while(mathlib_funcs[i].name!=nullptr) {
|
||||
sq_pushstring(v,mathlib_funcs[i].name,-1);
|
||||
sq_newclosure(v,mathlib_funcs[i].f,0);
|
||||
sq_setparamscheck(v,mathlib_funcs[i].nparamscheck,mathlib_funcs[i].typemask);
|
||||
|
58
src/3rdparty/squirrel/squirrel/sqapi.cpp
vendored
58
src/3rdparty/squirrel/squirrel/sqapi.cpp
vendored
@@ -60,11 +60,11 @@ HSQUIRRELVM sq_open(SQInteger initialstacksize)
|
||||
v = (SQVM *)SQ_MALLOC(sizeof(SQVM));
|
||||
new (v) SQVM(ss);
|
||||
ss->_root_vm = v;
|
||||
if(v->Init(NULL, initialstacksize)) {
|
||||
if(v->Init(nullptr, initialstacksize)) {
|
||||
return v;
|
||||
} else {
|
||||
sq_delete(v, SQVM);
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
@@ -83,7 +83,7 @@ HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize)
|
||||
return v;
|
||||
} else {
|
||||
sq_delete(v, SQVM);
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ void sq_close(HSQUIRRELVM v)
|
||||
SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror)
|
||||
{
|
||||
SQObjectPtr o;
|
||||
if(Compile(v, read, p, sourcename, o, raiseerror?true:false, _ss(v)->_debuginfo)) {
|
||||
if(Compile(v, read, p, sourcename, o, raiseerror != 0, _ss(v)->_debuginfo)) {
|
||||
v->Push(SQClosure::Create(_ss(v), _funcproto(o)));
|
||||
return SQ_OK;
|
||||
}
|
||||
@@ -144,12 +144,12 @@ SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQCha
|
||||
|
||||
void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable)
|
||||
{
|
||||
_ss(v)->_debuginfo = enable?true:false;
|
||||
_ss(v)->_debuginfo = enable != 0;
|
||||
}
|
||||
|
||||
void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable)
|
||||
{
|
||||
_ss(v)->_notifyallexceptions = enable?true:false;
|
||||
_ss(v)->_notifyallexceptions = enable != 0;
|
||||
}
|
||||
|
||||
void sq_addref(HSQUIRRELVM v,HSQOBJECT *po)
|
||||
@@ -178,7 +178,7 @@ const SQChar *sq_objtostring(HSQOBJECT *o)
|
||||
if(sq_type(*o) == OT_STRING) {
|
||||
return _stringval(*o);
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
SQInteger sq_objtointeger(HSQOBJECT *o)
|
||||
@@ -224,7 +224,7 @@ void sq_pushinteger(HSQUIRRELVM v,SQInteger n)
|
||||
|
||||
void sq_pushbool(HSQUIRRELVM v,SQBool b)
|
||||
{
|
||||
v->Push(b?true:false);
|
||||
v->Push(b != 0);
|
||||
}
|
||||
|
||||
void sq_pushfloat(HSQUIRRELVM v,SQFloat n)
|
||||
@@ -256,7 +256,7 @@ void sq_newarray(HSQUIRRELVM v,SQInteger size)
|
||||
|
||||
SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase)
|
||||
{
|
||||
SQClass *baseclass = NULL;
|
||||
SQClass *baseclass = nullptr;
|
||||
if(hasbase) {
|
||||
SQObjectPtr &base = stack_get(v,-1);
|
||||
if(type(base) != OT_CLASS)
|
||||
@@ -555,7 +555,7 @@ SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b)
|
||||
|
||||
SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, idx, OT_STRING,o);
|
||||
*c = _stringval(*o);
|
||||
return SQ_OK;
|
||||
@@ -563,7 +563,7 @@ SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c)
|
||||
|
||||
SQRESULT sq_getthread(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, idx, OT_THREAD,o);
|
||||
*thread = _thread(*o);
|
||||
return SQ_OK;
|
||||
@@ -598,7 +598,7 @@ SQInteger sq_getsize(HSQUIRRELVM v, SQInteger idx)
|
||||
|
||||
SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, idx, OT_USERDATA,o);
|
||||
(*p) = _userdataval(*o);
|
||||
if(typetag) *typetag = _userdata(*o)->_typetag;
|
||||
@@ -637,7 +637,7 @@ SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag)
|
||||
|
||||
SQRESULT sq_getuserpointer(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, idx, OT_USERPOINTER,o);
|
||||
(*p) = _userpointer(*o);
|
||||
return SQ_OK;
|
||||
@@ -666,13 +666,13 @@ SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserP
|
||||
SQObjectPtr &o = stack_get(v,idx);
|
||||
if(type(o) != OT_INSTANCE) return sq_throwerror(v,"the object is not a class instance");
|
||||
(*p) = _instance(o)->_userpointer;
|
||||
if(typetag != 0) {
|
||||
if(typetag != nullptr) {
|
||||
SQClass *cl = _instance(o)->_class;
|
||||
do{
|
||||
if(cl->_typetag == typetag)
|
||||
return SQ_OK;
|
||||
cl = cl->_base;
|
||||
}while(cl != NULL);
|
||||
}while(cl != nullptr);
|
||||
return sq_throwerror(v,"invalid type tag");
|
||||
}
|
||||
return SQ_OK;
|
||||
@@ -724,7 +724,7 @@ SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic)
|
||||
if(type(self) == OT_TABLE || type(self) == OT_CLASS) {
|
||||
SQObjectPtr &key = v->GetUp(-2);
|
||||
if(type(key) == OT_NULL) return sq_throwerror(v, "null is not a valid key");
|
||||
v->NewSlot(self, key, v->GetUp(-1),bstatic?true:false);
|
||||
v->NewSlot(self, key, v->GetUp(-1),bstatic != 0);
|
||||
v->Pop(2);
|
||||
}
|
||||
return SQ_OK;
|
||||
@@ -801,14 +801,14 @@ SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx)
|
||||
if(!_table(self)->SetDelegate(_table(mt))) return sq_throwerror(v, "delagate cycle");
|
||||
v->Pop();}
|
||||
else if(type(mt)==OT_NULL) {
|
||||
_table(self)->SetDelegate(NULL); v->Pop(); }
|
||||
_table(self)->SetDelegate(nullptr); v->Pop(); }
|
||||
else return sq_aux_invalidtype(v,type);
|
||||
break;
|
||||
case OT_USERDATA:
|
||||
if(type(mt)==OT_TABLE) {
|
||||
_userdata(self)->SetDelegate(_table(mt)); v->Pop(); }
|
||||
else if(type(mt)==OT_NULL) {
|
||||
_userdata(self)->SetDelegate(NULL); v->Pop(); }
|
||||
_userdata(self)->SetDelegate(nullptr); v->Pop(); }
|
||||
else return sq_aux_invalidtype(v, type);
|
||||
break;
|
||||
default:
|
||||
@@ -909,7 +909,7 @@ const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedIntege
|
||||
}
|
||||
SQVM::CallInfo &ci=v->_callsstack[lvl];
|
||||
if(type(ci._closure)!=OT_CLOSURE)
|
||||
return NULL;
|
||||
return nullptr;
|
||||
SQClosure *c=_closure(ci._closure);
|
||||
SQFunctionProto *func=_funcproto(c->_function);
|
||||
if(func->_noutervalues > (SQInteger)idx) {
|
||||
@@ -919,7 +919,7 @@ const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedIntege
|
||||
idx -= func->_noutervalues;
|
||||
return func->GetLocal(v,stackbase,idx,(SQInteger)(ci._ip-func->_instructions)-1);
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj)
|
||||
@@ -929,7 +929,7 @@ void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj)
|
||||
|
||||
void sq_resetobject(HSQOBJECT *po)
|
||||
{
|
||||
po->_unVal.pUserPointer=NULL;po->_type=OT_NULL;
|
||||
po->_unVal.pUserPointer=nullptr;po->_type=OT_NULL;
|
||||
}
|
||||
|
||||
SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err)
|
||||
@@ -975,7 +975,7 @@ SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror,
|
||||
v->_can_suspend = suspend >= 0;
|
||||
if (v->_can_suspend) v->_ops_till_suspend = suspend;
|
||||
|
||||
if(v->Call(v->GetUp(-(params+1)),params,v->_top-params,res,raiseerror?true:false,v->_can_suspend)){
|
||||
if(v->Call(v->GetUp(-(params+1)),params,v->_top-params,res,raiseerror != 0,v->_can_suspend)){
|
||||
if(!v->_suspended) {
|
||||
v->Pop(params);//pop closure and args
|
||||
}
|
||||
@@ -1051,7 +1051,7 @@ void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f)
|
||||
|
||||
SQRESULT sq_writeclosure(HSQUIRRELVM v,SQWRITEFUNC w,SQUserPointer up)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, -1, OT_CLOSURE,o);
|
||||
unsigned short tag = SQ_BYTECODE_STREAM_TAG;
|
||||
if(w(up,&tag,2) != 2)
|
||||
@@ -1093,7 +1093,7 @@ SQInteger sq_collectgarbage(HSQUIRRELVM v)
|
||||
const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval)
|
||||
{
|
||||
SQObjectPtr &self = stack_get(v,idx);
|
||||
const SQChar *name = NULL;
|
||||
const SQChar *name = nullptr;
|
||||
if(type(self) == OT_CLOSURE) {
|
||||
if(_closure(self)->_outervalues.size()>nval) {
|
||||
v->Push(_closure(self)->_outervalues[nval]);
|
||||
@@ -1131,7 +1131,7 @@ SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval)
|
||||
|
||||
SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
||||
SQObjectPtr &key = stack_get(v,-2);
|
||||
SQObjectPtr &val = stack_get(v,-1);
|
||||
@@ -1153,7 +1153,7 @@ SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx)
|
||||
|
||||
SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
||||
SQObjectPtr &key = stack_get(v,-1);
|
||||
SQObjectPtr attrs;
|
||||
@@ -1173,7 +1173,7 @@ SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
|
||||
|
||||
SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
||||
if(_class(*o)->_base)
|
||||
v->Push(SQObjectPtr(_class(*o)->_base));
|
||||
@@ -1184,7 +1184,7 @@ SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx)
|
||||
|
||||
SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, idx, OT_INSTANCE,o);
|
||||
v->Push(SQObjectPtr(_instance(*o)->_class));
|
||||
return SQ_OK;
|
||||
@@ -1192,7 +1192,7 @@ SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx)
|
||||
|
||||
SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
SQObjectPtr *o = nullptr;
|
||||
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
||||
v->Push(_class(*o)->CreateInstance());
|
||||
return SQ_OK;
|
||||
|
50
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
50
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
@@ -248,29 +248,29 @@ static SQRegFunction base_funcs[]={
|
||||
{"getconsttable",base_getconsttable,1, NULL},
|
||||
{"setconsttable",base_setconsttable,2, NULL},
|
||||
#endif
|
||||
{"assert",base_assert,2, NULL},
|
||||
{"print",base_print,2, NULL},
|
||||
{"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},
|
||||
#endif
|
||||
{"array",base_array,-2, ".n"},
|
||||
{"type",base_type,2, NULL},
|
||||
{"type",base_type,2, nullptr},
|
||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||
{"dummy",base_dummy,0,NULL},
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
{"collectgarbage",base_collectgarbage,1, "t"},
|
||||
#endif
|
||||
#endif
|
||||
{0,0,0,0}
|
||||
{nullptr,nullptr,0,nullptr}
|
||||
};
|
||||
|
||||
void sq_base_register(HSQUIRRELVM v)
|
||||
{
|
||||
SQInteger i=0;
|
||||
sq_pushroottable(v);
|
||||
while(base_funcs[i].name!=0) {
|
||||
while(base_funcs[i].name!=nullptr) {
|
||||
sq_pushstring(v,base_funcs[i].name,-1);
|
||||
sq_newclosure(v,base_funcs[i].f,0);
|
||||
sq_setnativeclosurename(v,-1,base_funcs[i].name);
|
||||
@@ -415,10 +415,10 @@ SQRegFunction SQSharedState::_table_default_delegate_funcz[]={
|
||||
{"rawset",table_rawset,3, "t"},
|
||||
{"rawdelete",table_rawdelete,2, "t"},
|
||||
{"rawin",container_rawexists,2, "t"},
|
||||
{"weakref",obj_delegate_weakref,1, NULL },
|
||||
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||
{"tostring",default_delegate_tostring,1, "."},
|
||||
{"clear",obj_clear,1, "."},
|
||||
{0,0,0,0}
|
||||
{nullptr,nullptr,0,nullptr}
|
||||
};
|
||||
|
||||
//ARRAY DEFAULT DELEGATE///////////////////////////////////////
|
||||
@@ -624,10 +624,10 @@ SQRegFunction SQSharedState::_array_default_delegate_funcz[]={
|
||||
{"reverse",array_reverse,1, "a"},
|
||||
{"sort",array_sort,-1, "ac"},
|
||||
{"slice",array_slice,-1, "ann"},
|
||||
{"weakref",obj_delegate_weakref,1, NULL },
|
||||
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||
{"tostring",default_delegate_tostring,1, "."},
|
||||
{"clear",obj_clear,1, "."},
|
||||
{0,0,0,0}
|
||||
{nullptr,nullptr,0,nullptr}
|
||||
};
|
||||
|
||||
//STRING DEFAULT DELEGATE//////////////////////////
|
||||
@@ -687,8 +687,8 @@ SQRegFunction SQSharedState::_string_default_delegate_funcz[]={
|
||||
{"find",string_find,-2, "s s n "},
|
||||
{"tolower",string_tolower,1, "s"},
|
||||
{"toupper",string_toupper,1, "s"},
|
||||
{"weakref",obj_delegate_weakref,1, NULL },
|
||||
{0,0,0,0}
|
||||
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||
{nullptr,nullptr,0,nullptr}
|
||||
};
|
||||
|
||||
//INTEGER DEFAULT DELEGATE//////////////////////////
|
||||
@@ -697,8 +697,8 @@ SQRegFunction SQSharedState::_number_default_delegate_funcz[]={
|
||||
{"tofloat",default_delegate_tofloat,1, "n|b"},
|
||||
{"tostring",default_delegate_tostring,1, "."},
|
||||
{"tochar",number_delegate_tochar,1, "n|b"},
|
||||
{"weakref",obj_delegate_weakref,1, NULL },
|
||||
{0,0,0,0}
|
||||
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||
{nullptr,nullptr,0,nullptr}
|
||||
};
|
||||
|
||||
//CLOSURE DEFAULT DELEGATE//////////////////////////
|
||||
@@ -782,11 +782,11 @@ SQRegFunction SQSharedState::_closure_default_delegate_funcz[]={
|
||||
{"pcall",closure_pcall,-1, "c"},
|
||||
{"acall",closure_acall,2, "ca"},
|
||||
{"pacall",closure_pacall,2, "ca"},
|
||||
{"weakref",obj_delegate_weakref,1, NULL },
|
||||
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||
{"tostring",default_delegate_tostring,1, "."},
|
||||
{"bindenv",closure_bindenv,2, "c x|y|t"},
|
||||
{"getinfos",closure_getinfos,1, "c"},
|
||||
{0,0,0,0}
|
||||
{nullptr,nullptr,0,nullptr}
|
||||
};
|
||||
|
||||
//GENERATOR DEFAULT DELEGATE
|
||||
@@ -803,9 +803,9 @@ static SQInteger generator_getstatus(HSQUIRRELVM v)
|
||||
|
||||
SQRegFunction SQSharedState::_generator_default_delegate_funcz[]={
|
||||
{"getstatus",generator_getstatus,1, "g"},
|
||||
{"weakref",obj_delegate_weakref,1, NULL },
|
||||
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||
{"tostring",default_delegate_tostring,1, "."},
|
||||
{0,0,0,0}
|
||||
{nullptr,nullptr,0,nullptr}
|
||||
};
|
||||
|
||||
//THREAD DEFAULT DELEGATE
|
||||
@@ -889,9 +889,9 @@ SQRegFunction SQSharedState::_thread_default_delegate_funcz[] = {
|
||||
{"call", thread_call, -1, "v"},
|
||||
{"wakeup", thread_wakeup, -1, "v"},
|
||||
{"getstatus", thread_getstatus, 1, "v"},
|
||||
{"weakref",obj_delegate_weakref,1, NULL },
|
||||
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||
{"tostring",default_delegate_tostring,1, "."},
|
||||
{0,0,0,0},
|
||||
{nullptr,nullptr,0,nullptr},
|
||||
};
|
||||
|
||||
static SQInteger class_getattributes(HSQUIRRELVM v)
|
||||
@@ -919,10 +919,10 @@ SQRegFunction SQSharedState::_class_default_delegate_funcz[] = {
|
||||
{"getattributes", class_getattributes, 2, "y."},
|
||||
{"setattributes", class_setattributes, 3, "y.."},
|
||||
{"rawin",container_rawexists,2, "y"},
|
||||
{"weakref",obj_delegate_weakref,1, NULL },
|
||||
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||
{"tostring",default_delegate_tostring,1, "."},
|
||||
{"instance",class_instance,1, "y"},
|
||||
{0,0,0,0}
|
||||
{nullptr,nullptr,0,nullptr}
|
||||
};
|
||||
|
||||
static SQInteger instance_getclass(HSQUIRRELVM v)
|
||||
@@ -935,9 +935,9 @@ static SQInteger instance_getclass(HSQUIRRELVM v)
|
||||
SQRegFunction SQSharedState::_instance_default_delegate_funcz[] = {
|
||||
{"getclass", instance_getclass, 1, "x"},
|
||||
{"rawin",container_rawexists,2, "x"},
|
||||
{"weakref",obj_delegate_weakref,1, NULL },
|
||||
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||
{"tostring",default_delegate_tostring,1, "."},
|
||||
{0,0,0,0}
|
||||
{nullptr,nullptr,0,nullptr}
|
||||
};
|
||||
|
||||
static SQInteger weakref_ref(HSQUIRRELVM v)
|
||||
@@ -949,9 +949,9 @@ static SQInteger weakref_ref(HSQUIRRELVM v)
|
||||
|
||||
SQRegFunction SQSharedState::_weakref_default_delegate_funcz[] = {
|
||||
{"ref",weakref_ref,1, "r"},
|
||||
{"weakref",obj_delegate_weakref,1, NULL },
|
||||
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||
{"tostring",default_delegate_tostring,1, "."},
|
||||
{0,0,0,0}
|
||||
{nullptr,nullptr,0,nullptr}
|
||||
};
|
||||
|
||||
|
||||
|
10
src/3rdparty/squirrel/squirrel/sqclass.cpp
vendored
10
src/3rdparty/squirrel/squirrel/sqclass.cpp
vendored
@@ -15,8 +15,8 @@
|
||||
SQClass::SQClass(SQSharedState *ss,SQClass *base)
|
||||
{
|
||||
_base = base;
|
||||
_typetag = 0;
|
||||
_hook = NULL;
|
||||
_typetag = nullptr;
|
||||
_hook = nullptr;
|
||||
_udsize = 0;
|
||||
_metamethods.resize(MT_LAST); //size it to max size
|
||||
if(_base) {
|
||||
@@ -139,8 +139,8 @@ bool SQClass::GetAttributes(const SQObjectPtr &key,SQObjectPtr &outval)
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
void SQInstance::Init(SQSharedState *ss)
|
||||
{
|
||||
_userpointer = NULL;
|
||||
_hook = NULL;
|
||||
_userpointer = nullptr;
|
||||
_hook = nullptr;
|
||||
__ObjAddRef(_class);
|
||||
_delegate = _class->_members;
|
||||
INIT_CHAIN();
|
||||
@@ -196,7 +196,7 @@ bool SQInstance::GetMetaMethod(SQVM *v,SQMetaMethod mm,SQObjectPtr &res)
|
||||
bool SQInstance::InstanceOf(SQClass *trg)
|
||||
{
|
||||
SQClass *parent = _class;
|
||||
while(parent != NULL) {
|
||||
while(parent != nullptr) {
|
||||
if(parent == trg)
|
||||
return true;
|
||||
parent = parent->_base;
|
||||
|
2
src/3rdparty/squirrel/squirrel/sqclosure.h
vendored
2
src/3rdparty/squirrel/squirrel/sqclosure.h
vendored
@@ -45,7 +45,7 @@ struct SQGenerator : public CHAINABLE_OBJ
|
||||
{
|
||||
enum SQGeneratorState{eRunning,eSuspended,eDead};
|
||||
private:
|
||||
SQGenerator(SQSharedState *ss,SQClosure *closure){_closure=closure;_state=eRunning;_ci._generator=NULL;INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this);}
|
||||
SQGenerator(SQSharedState *ss,SQClosure *closure){_closure=closure;_state=eRunning;_ci._generator=nullptr;INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this);}
|
||||
public:
|
||||
static SQGenerator *Create(SQSharedState *ss,SQClosure *closure){
|
||||
SQGenerator *nc=(SQGenerator*)SQ_MALLOC(sizeof(SQGenerator));
|
||||
|
@@ -57,7 +57,7 @@ typedef sqvector<ExpState> ExpStateVec;
|
||||
class SQCompiler
|
||||
{
|
||||
public:
|
||||
SQCompiler(SQVM *v, SQLEXREADFUNC rg, SQUserPointer up, const SQChar* sourcename, bool raiseerror, bool lineinfo) : _token(0), _fs(NULL), _lex(_ss(v), rg, up, ThrowError, this), _debugline(0), _debugop(0)
|
||||
SQCompiler(SQVM *v, SQLEXREADFUNC rg, SQUserPointer up, const SQChar* sourcename, bool raiseerror, bool lineinfo) : _token(0), _fs(nullptr), _lex(_ss(v), rg, up, ThrowError, this), _debugline(0), _debugop(0)
|
||||
{
|
||||
_vm=v;
|
||||
_sourcename = SQString::Create(_ss(v), sourcename);
|
||||
@@ -164,7 +164,7 @@ public:
|
||||
_debugline = 1;
|
||||
_debugop = 0;
|
||||
|
||||
SQFuncState funcstate(_ss(_vm), NULL,ThrowError,this);
|
||||
SQFuncState funcstate(_ss(_vm), nullptr,ThrowError,this);
|
||||
funcstate._name = SQString::Create(_ss(_vm), "main");
|
||||
_fs = &funcstate;
|
||||
_fs->AddParameter(_fs->CreateString("this"));
|
||||
|
4
src/3rdparty/squirrel/squirrel/sqlexer.cpp
vendored
4
src/3rdparty/squirrel/squirrel/sqlexer.cpp
vendored
@@ -87,7 +87,7 @@ SQLexer::SQLexer(SQSharedState *ss, SQLEXREADFUNC rg, SQUserPointer up,CompilerE
|
||||
_prevtoken = -1;
|
||||
_curtoken = -1;
|
||||
|
||||
_svalue = NULL;
|
||||
_svalue = nullptr;
|
||||
_nvalue = 0;
|
||||
_fvalue = 0;
|
||||
|
||||
@@ -119,7 +119,7 @@ const SQChar *SQLexer::Tok2Str(SQInteger tok)
|
||||
if(((SQInteger)_integer(val)) == tok)
|
||||
return _stringval(key);
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void SQLexer::LexBlockComment()
|
||||
|
10
src/3rdparty/squirrel/squirrel/sqobject.cpp
vendored
10
src/3rdparty/squirrel/squirrel/sqobject.cpp
vendored
@@ -41,7 +41,7 @@ const SQChar *IdType2Name(SQObjectType type)
|
||||
case _RT_INSTANCE: return "instance";
|
||||
case _RT_WEAKREF: return "weakref";
|
||||
default:
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,13 +101,13 @@ SQRefCounted::~SQRefCounted()
|
||||
{
|
||||
if(_weakref) {
|
||||
_weakref->_obj._type = OT_NULL;
|
||||
_weakref->_obj._unVal.pRefCounted = NULL;
|
||||
_weakref->_obj._unVal.pRefCounted = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void SQWeakRef::Release() {
|
||||
if(ISREFCOUNTED(_obj._type)) {
|
||||
_obj._unVal.pRefCounted->_weakref = NULL;
|
||||
_obj._unVal.pRefCounted->_weakref = nullptr;
|
||||
}
|
||||
sq_delete(this,SQWeakRef);
|
||||
}
|
||||
@@ -149,7 +149,7 @@ bool SQGenerator::Yield(SQVM *v)
|
||||
for(SQInteger j = nvargs - 1; j >= 0; j--) {
|
||||
_vargsstack.push_back(v->_vargsstack[vargsbase+j]);
|
||||
}
|
||||
_ci._generator=NULL;
|
||||
_ci._generator=nullptr;
|
||||
for(SQInteger i=0;i<_ci._etraps;i++) {
|
||||
_etraps.push_back(v->_etraps.top());
|
||||
v->_etraps.pop_back();
|
||||
@@ -204,7 +204,7 @@ void SQArray::Extend(const SQArray *a){
|
||||
const SQChar* SQFunctionProto::GetLocal(SQVM *vm,SQUnsignedInteger stackbase,SQUnsignedInteger nseq,SQUnsignedInteger nop)
|
||||
{
|
||||
SQUnsignedInteger nvars=_nlocalvarinfos;
|
||||
const SQChar *res=NULL;
|
||||
const SQChar *res=nullptr;
|
||||
if(nvars>=nseq){
|
||||
for(SQUnsignedInteger i=0;i<nvars;i++){
|
||||
if(_localvarinfos[i]._start_op<=nop && _localvarinfos[i]._end_op>=nop)
|
||||
|
6
src/3rdparty/squirrel/squirrel/sqobject.h
vendored
6
src/3rdparty/squirrel/squirrel/sqobject.h
vendored
@@ -56,7 +56,7 @@ enum SQMetaMethod{
|
||||
|
||||
struct SQRefCounted
|
||||
{
|
||||
SQRefCounted() { _uiRef = 0; _weakref = NULL; }
|
||||
SQRefCounted() { _uiRef = 0; _weakref = nullptr; }
|
||||
virtual ~SQRefCounted();
|
||||
SQWeakRef *GetWeakRef(SQObjectType type);
|
||||
SQUnsignedInteger _uiRef;
|
||||
@@ -152,7 +152,7 @@ struct SQObjectPtr : public SQObject
|
||||
{
|
||||
SQ_OBJECT_RAWINIT()
|
||||
_type=OT_NULL;
|
||||
_unVal.pUserPointer=NULL;
|
||||
_unVal.pUserPointer=nullptr;
|
||||
}
|
||||
SQObjectPtr(const SQObjectPtr &o)
|
||||
{
|
||||
@@ -299,7 +299,7 @@ struct SQObjectPtr : public SQObject
|
||||
tOldType = _type;
|
||||
unOldVal = _unVal;
|
||||
_type = OT_NULL;
|
||||
_unVal.pUserPointer = NULL;
|
||||
_unVal.pUserPointer = nullptr;
|
||||
__Release(tOldType,unOldVal);
|
||||
}
|
||||
inline SQObjectPtr& operator=(SQInteger i)
|
||||
|
44
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
44
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
@@ -79,12 +79,12 @@ SQTable *CreateDefaultDelegate(SQSharedState *ss,SQRegFunction *funcz)
|
||||
{
|
||||
SQInteger i=0;
|
||||
SQTable *t=SQTable::Create(ss,0);
|
||||
while(funcz[i].name!=0){
|
||||
while(funcz[i].name!=nullptr){
|
||||
SQNativeClosure *nc = SQNativeClosure::Create(ss,funcz[i].f);
|
||||
nc->_nparamscheck = funcz[i].nparamscheck;
|
||||
nc->_name = SQString::Create(ss,funcz[i].name);
|
||||
if(funcz[i].typemask && !CompileTypemask(nc->_typecheck,funcz[i].typemask))
|
||||
return NULL;
|
||||
return nullptr;
|
||||
t->NewSlot(SQString::Create(ss,funcz[i].name),nc);
|
||||
i++;
|
||||
}
|
||||
@@ -93,15 +93,15 @@ SQTable *CreateDefaultDelegate(SQSharedState *ss,SQRegFunction *funcz)
|
||||
|
||||
SQSharedState::SQSharedState()
|
||||
{
|
||||
_compilererrorhandler = NULL;
|
||||
_printfunc = NULL;
|
||||
_compilererrorhandler = nullptr;
|
||||
_printfunc = nullptr;
|
||||
_debuginfo = false;
|
||||
_notifyallexceptions = false;
|
||||
_scratchpad=NULL;
|
||||
_scratchpad=nullptr;
|
||||
_scratchpadsize=0;
|
||||
_collectable_free_processing = false;
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
_gc_chain=NULL;
|
||||
_gc_chain=nullptr;
|
||||
#endif
|
||||
sq_new(_stringtable,SQStringTable);
|
||||
sq_new(_metamethods,SQObjectPtrVec);
|
||||
@@ -189,7 +189,7 @@ SQSharedState::~SQSharedState()
|
||||
_refs_table.Finalize();
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
SQCollectable *t = _gc_chain;
|
||||
SQCollectable *nx = NULL;
|
||||
SQCollectable *nx = nullptr;
|
||||
if(t) {
|
||||
t->_uiRef++;
|
||||
while(t) {
|
||||
@@ -299,7 +299,7 @@ SQInteger SQSharedState::CollectGarbage(SQVM *vm)
|
||||
EnqueueMarkObject(_instance_default_delegate,queue);
|
||||
EnqueueMarkObject(_weakref_default_delegate,queue);
|
||||
|
||||
SQCollectable *tchain=NULL;
|
||||
SQCollectable *tchain=nullptr;
|
||||
|
||||
while (!queue.IsEmpty()) {
|
||||
SQCollectable *q = queue.Pop();
|
||||
@@ -309,7 +309,7 @@ SQInteger SQSharedState::CollectGarbage(SQVM *vm)
|
||||
}
|
||||
|
||||
SQCollectable *t = _gc_chain;
|
||||
SQCollectable *nx = NULL;
|
||||
SQCollectable *nx = nullptr;
|
||||
if(t) {
|
||||
t->_uiRef++;
|
||||
while(t) {
|
||||
@@ -340,7 +340,7 @@ SQInteger SQSharedState::CollectGarbage(SQVM *vm)
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void SQCollectable::AddToChain(SQCollectable **chain,SQCollectable *c)
|
||||
{
|
||||
c->_prev = NULL;
|
||||
c->_prev = nullptr;
|
||||
c->_next = *chain;
|
||||
if(*chain) (*chain)->_prev = c;
|
||||
*chain = c;
|
||||
@@ -352,8 +352,8 @@ void SQCollectable::RemoveFromChain(SQCollectable **chain,SQCollectable *c)
|
||||
else *chain = c->_next;
|
||||
if(c->_next)
|
||||
c->_next->_prev = c->_prev;
|
||||
c->_next = NULL;
|
||||
c->_prev = NULL;
|
||||
c->_next = nullptr;
|
||||
c->_prev = nullptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -483,16 +483,16 @@ RefTable::RefNode *RefTable::Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bo
|
||||
{
|
||||
RefNode *ref;
|
||||
mainpos = ::HashObj(obj)&(_numofslots-1);
|
||||
*prev = NULL;
|
||||
*prev = nullptr;
|
||||
for (ref = _buckets[mainpos]; ref; ) {
|
||||
if(_rawval(ref->obj) == _rawval(obj) && type(ref->obj) == type(obj))
|
||||
break;
|
||||
*prev = ref;
|
||||
ref = ref->next;
|
||||
}
|
||||
if(ref == NULL && add) {
|
||||
if(ref == nullptr && add) {
|
||||
if(_numofslots == _slotused) {
|
||||
assert(_freelist == 0);
|
||||
assert(_freelist == nullptr);
|
||||
Resize(_numofslots*2);
|
||||
mainpos = ::HashObj(obj)&(_numofslots-1);
|
||||
}
|
||||
@@ -510,16 +510,16 @@ void RefTable::AllocNodes(SQUnsignedInteger size)
|
||||
RefNode *temp = nodes;
|
||||
SQUnsignedInteger n;
|
||||
for(n = 0; n < size - 1; n++) {
|
||||
bucks[n] = NULL;
|
||||
bucks[n] = nullptr;
|
||||
temp->refs = 0;
|
||||
new (&temp->obj) SQObjectPtr;
|
||||
temp->next = temp+1;
|
||||
temp++;
|
||||
}
|
||||
bucks[n] = NULL;
|
||||
bucks[n] = nullptr;
|
||||
temp->refs = 0;
|
||||
new (&temp->obj) SQObjectPtr;
|
||||
temp->next = NULL;
|
||||
temp->next = nullptr;
|
||||
_freelist = nodes;
|
||||
_nodes = nodes;
|
||||
_buckets = bucks;
|
||||
@@ -543,7 +543,7 @@ SQStringTable::SQStringTable()
|
||||
SQStringTable::~SQStringTable()
|
||||
{
|
||||
SQ_FREE(_strings,sizeof(SQString*)*_numofslots);
|
||||
_strings = NULL;
|
||||
_strings = nullptr;
|
||||
}
|
||||
|
||||
void SQStringTable::AllocNodes(SQInteger size)
|
||||
@@ -580,8 +580,8 @@ SQString::SQString(const SQChar *news, SQInteger len)
|
||||
_val[len] = '\0';
|
||||
_len = len;
|
||||
_hash = ::_hashstr(news,(size_t)len);
|
||||
_next = NULL;
|
||||
_sharedstate = NULL;
|
||||
_next = nullptr;
|
||||
_sharedstate = nullptr;
|
||||
}
|
||||
|
||||
void SQStringTable::Resize(SQInteger size)
|
||||
@@ -605,7 +605,7 @@ void SQStringTable::Resize(SQInteger size)
|
||||
void SQStringTable::Remove(SQString *bs)
|
||||
{
|
||||
SQString *s;
|
||||
SQString *prev=NULL;
|
||||
SQString *prev=nullptr;
|
||||
SQHash h = bs->_hash&(_numofslots - 1);
|
||||
|
||||
for (s = _strings[h]; s; ){
|
||||
|
12
src/3rdparty/squirrel/squirrel/sqtable.cpp
vendored
12
src/3rdparty/squirrel/squirrel/sqtable.cpp
vendored
@@ -18,7 +18,7 @@ SQTable::SQTable(SQSharedState *ss,SQInteger nInitialSize)
|
||||
while(nInitialSize>pow2size)pow2size=pow2size<<1;
|
||||
AllocNodes(pow2size);
|
||||
_usednodes = 0;
|
||||
_delegate = NULL;
|
||||
_delegate = nullptr;
|
||||
INIT_CHAIN();
|
||||
ADD_TO_CHAIN(&_sharedstate->_gc_chain,this);
|
||||
}
|
||||
@@ -39,7 +39,7 @@ void SQTable::AllocNodes(SQInteger nSize)
|
||||
_HashNode *nodes=(_HashNode *)SQ_MALLOC(sizeof(_HashNode)*nSize);
|
||||
for(SQInteger i=0;i<nSize;i++){
|
||||
new (&nodes[i]) _HashNode;
|
||||
nodes[i].next=NULL;
|
||||
nodes[i].next=nullptr;
|
||||
}
|
||||
_numofnodes=nSize;
|
||||
_nodes=nodes;
|
||||
@@ -120,7 +120,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
||||
if (mp > n && (othern = &_nodes[mph]) != mp){
|
||||
/* yes; move colliding node into free position */
|
||||
while (othern->next != mp){
|
||||
assert(othern->next != NULL);
|
||||
assert(othern->next != nullptr);
|
||||
othern = othern->next; /* find previous */
|
||||
}
|
||||
othern->next = n; /* redo the chain with `n' in place of `mp' */
|
||||
@@ -129,7 +129,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
||||
n->next = mp->next;
|
||||
mp->key = _null_;
|
||||
mp->val = _null_;
|
||||
mp->next = NULL; /* now `mp' is free */
|
||||
mp->next = nullptr; /* now `mp' is free */
|
||||
}
|
||||
else{
|
||||
/* new node will go into free position */
|
||||
@@ -141,7 +141,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
||||
mp->key = key;
|
||||
|
||||
for (;;) { /* correct `firstfree' */
|
||||
if (type(_firstfree->key) == OT_NULL && _firstfree->next == NULL) {
|
||||
if (type(_firstfree->key) == OT_NULL && _firstfree->next == nullptr) {
|
||||
mp->val = val;
|
||||
_usednodes++;
|
||||
return true; /* OK; table still has a free place */
|
||||
@@ -190,7 +190,7 @@ void SQTable::_ClearNodes()
|
||||
void SQTable::Finalize()
|
||||
{
|
||||
_ClearNodes();
|
||||
SetDelegate(NULL);
|
||||
SetDelegate(nullptr);
|
||||
}
|
||||
|
||||
void SQTable::Clear()
|
||||
|
8
src/3rdparty/squirrel/squirrel/sqtable.h
vendored
8
src/3rdparty/squirrel/squirrel/sqtable.h
vendored
@@ -27,7 +27,7 @@ struct SQTable : public SQDelegable
|
||||
private:
|
||||
struct _HashNode
|
||||
{
|
||||
_HashNode() { next = NULL; }
|
||||
_HashNode() { next = nullptr; }
|
||||
SQObjectPtr val;
|
||||
SQObjectPtr key;
|
||||
_HashNode *next;
|
||||
@@ -47,14 +47,14 @@ public:
|
||||
{
|
||||
SQTable *newtable = (SQTable*)SQ_MALLOC(sizeof(SQTable));
|
||||
new (newtable) SQTable(ss, nInitialSize);
|
||||
newtable->_delegate = NULL;
|
||||
newtable->_delegate = nullptr;
|
||||
return newtable;
|
||||
}
|
||||
void Finalize() override;
|
||||
SQTable *Clone();
|
||||
~SQTable()
|
||||
{
|
||||
SetDelegate(NULL);
|
||||
SetDelegate(nullptr);
|
||||
REMOVE_FROM_CHAIN(&_sharedstate->_gc_chain, this);
|
||||
for (SQInteger i = 0; i < _numofnodes; i++) _nodes[i].~_HashNode();
|
||||
SQ_FREE(_nodes, _numofnodes * sizeof(_HashNode));
|
||||
@@ -70,7 +70,7 @@ public:
|
||||
return n;
|
||||
}
|
||||
}while((n = n->next));
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
bool Get(const SQObjectPtr &key,SQObjectPtr &val);
|
||||
void Remove(const SQObjectPtr &key);
|
||||
|
6
src/3rdparty/squirrel/squirrel/squserdata.h
vendored
6
src/3rdparty/squirrel/squirrel/squserdata.h
vendored
@@ -4,12 +4,12 @@
|
||||
|
||||
struct SQUserData : SQDelegable
|
||||
{
|
||||
SQUserData(SQSharedState *ss, SQInteger size){ _delegate = 0; _hook = NULL; INIT_CHAIN(); ADD_TO_CHAIN(&_ss(this)->_gc_chain, this); _size = size; _typetag = 0;
|
||||
SQUserData(SQSharedState *ss, SQInteger size){ _delegate = nullptr; _hook = nullptr; INIT_CHAIN(); ADD_TO_CHAIN(&_ss(this)->_gc_chain, this); _size = size; _typetag = nullptr;
|
||||
}
|
||||
~SQUserData()
|
||||
{
|
||||
REMOVE_FROM_CHAIN(&_ss(this)->_gc_chain, this);
|
||||
SetDelegate(NULL);
|
||||
SetDelegate(nullptr);
|
||||
}
|
||||
static SQUserData* Create(SQSharedState *ss, SQInteger size)
|
||||
{
|
||||
@@ -19,7 +19,7 @@ struct SQUserData : SQDelegable
|
||||
}
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
|
||||
void Finalize(){SetDelegate(NULL);}
|
||||
void Finalize(){SetDelegate(nullptr);}
|
||||
#endif
|
||||
void Release() {
|
||||
if (_hook) _hook(_val,_size);
|
||||
|
2
src/3rdparty/squirrel/squirrel/squtils.h
vendored
2
src/3rdparty/squirrel/squirrel/squtils.h
vendored
@@ -18,7 +18,7 @@ template<typename T> class sqvector
|
||||
public:
|
||||
sqvector()
|
||||
{
|
||||
_vals = NULL;
|
||||
_vals = nullptr;
|
||||
_size = 0;
|
||||
_allocated = 0;
|
||||
}
|
||||
|
24
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
24
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
@@ -33,7 +33,7 @@ void SQVM::ClearStack(SQInteger last_top)
|
||||
tOldType = o._type;
|
||||
unOldVal = o._unVal;
|
||||
o._type = OT_NULL;
|
||||
o._unVal.pUserPointer = NULL;
|
||||
o._unVal.pUserPointer = nullptr;
|
||||
__Release(tOldType,unOldVal);
|
||||
}
|
||||
}
|
||||
@@ -107,7 +107,7 @@ SQVM::SQVM(SQSharedState *ss)
|
||||
_suspended_target=-1;
|
||||
_suspended_root = SQFalse;
|
||||
_suspended_traps=0;
|
||||
_foreignptr=NULL;
|
||||
_foreignptr=nullptr;
|
||||
_nnativecalls=0;
|
||||
_lasterror = _null_;
|
||||
_errorhandler = _null_;
|
||||
@@ -115,12 +115,12 @@ SQVM::SQVM(SQSharedState *ss)
|
||||
_can_suspend = false;
|
||||
_in_stackoverflow = false;
|
||||
_ops_till_suspend = 0;
|
||||
_callsstack = NULL;
|
||||
_callsstack = nullptr;
|
||||
_callsstacksize = 0;
|
||||
_alloccallsstacksize = 0;
|
||||
_top = 0;
|
||||
_stackbase = 0;
|
||||
ci = NULL;
|
||||
ci = nullptr;
|
||||
INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this);
|
||||
}
|
||||
|
||||
@@ -379,7 +379,7 @@ bool SQVM::StartCall(SQClosure *closure,SQInteger target,SQInteger args,SQIntege
|
||||
|
||||
if (!tailcall) {
|
||||
CallInfo lc = {};
|
||||
lc._generator = NULL;
|
||||
lc._generator = nullptr;
|
||||
lc._etraps = 0;
|
||||
lc._prevstkbase = (SQInt32) ( stackbase - _stackbase );
|
||||
lc._target = (SQInt32) target;
|
||||
@@ -437,7 +437,7 @@ bool SQVM::Return(SQInteger _arg0, SQInteger _arg1, SQObjectPtr &retval)
|
||||
|
||||
while (last_top > oldstackbase) _stack._vals[last_top--].Null();
|
||||
assert(oldstackbase >= _stackbase);
|
||||
return broot?true:false;
|
||||
return broot != 0;
|
||||
}
|
||||
|
||||
#define _RET_ON_FAIL(exp) { if(!exp) return false; }
|
||||
@@ -557,7 +557,7 @@ bool SQVM::DELEGATE_OP(SQObjectPtr &trg,SQObjectPtr &o1,SQObjectPtr &o2)
|
||||
}
|
||||
break;
|
||||
case OT_NULL:
|
||||
_table(o1)->SetDelegate(NULL);
|
||||
_table(o1)->SetDelegate(nullptr);
|
||||
break;
|
||||
default:
|
||||
Raise_Error("using '%s' as delegate", GetTypeName(o2));
|
||||
@@ -627,7 +627,7 @@ bool SQVM::GETVARGV_OP(SQObjectPtr &target,SQObjectPtr &index,CallInfo *ci)
|
||||
|
||||
bool SQVM::CLASS_OP(SQObjectPtr &target,SQInteger baseclass,SQInteger attributes)
|
||||
{
|
||||
SQClass *base = NULL;
|
||||
SQClass *base = nullptr;
|
||||
SQObjectPtr attrs;
|
||||
if(baseclass != -1) {
|
||||
if(type(_stack._vals[_stackbase+baseclass]) != OT_CLASS) { Raise_Error("trying to inherit from a %s",GetTypeName(_stack._vals[_stackbase+baseclass])); return false; }
|
||||
@@ -653,7 +653,7 @@ bool SQVM::CLASS_OP(SQObjectPtr &target,SQInteger baseclass,SQInteger attributes
|
||||
bool SQVM::IsEqual(SQObjectPtr &o1,SQObjectPtr &o2,bool &res)
|
||||
{
|
||||
if(type(o1) == type(o2)) {
|
||||
res = ((_rawval(o1) == _rawval(o2)?true:false));
|
||||
res = ((_rawval(o1) == _rawval(o2)));
|
||||
}
|
||||
else {
|
||||
if(sq_isnumeric(o1) && sq_isnumeric(o2)) {
|
||||
@@ -708,7 +708,7 @@ bool SQVM::Execute(SQObjectPtr &closure, SQInteger target, SQInteger nargs, SQIn
|
||||
temp_reg = closure;
|
||||
if(!StartCall(_closure(temp_reg), _top - nargs, nargs, stackbase, false)) {
|
||||
//call the handler if there are no calls in the stack, if not relies on the previous node
|
||||
if(ci == NULL) CallErrorHandler(_lasterror);
|
||||
if(ci == nullptr) CallErrorHandler(_lasterror);
|
||||
return false;
|
||||
}
|
||||
if (_funcproto(_closure(temp_reg)->_function)->_bgenerator) {
|
||||
@@ -1028,7 +1028,7 @@ common_call:
|
||||
case _OP_THROW: Raise_Error(TARGET); SQ_THROW();
|
||||
case _OP_CLASS: _GUARD(CLASS_OP(TARGET,arg1,arg2)); continue;
|
||||
case _OP_NEWSLOTA:
|
||||
bool bstatic = (arg0&NEW_SLOT_STATIC_FLAG)?true:false;
|
||||
bool bstatic = (arg0&NEW_SLOT_STATIC_FLAG) != 0;
|
||||
if(type(STK(arg1)) == OT_CLASS) {
|
||||
if(type(_class(STK(arg1))->_metamethods[MT_NEWMEMBER]) != OT_NULL ) {
|
||||
Push(STK(arg1)); Push(STK(arg2)); Push(STK(arg3));
|
||||
@@ -1160,7 +1160,7 @@ bool SQVM::CallNative(SQNativeClosure *nclosure,SQInteger nargs,SQInteger stackb
|
||||
_top = stackbase + nargs;
|
||||
CallInfo lci = {};
|
||||
lci._closure = nclosure;
|
||||
lci._generator = NULL;
|
||||
lci._generator = nullptr;
|
||||
lci._etraps = 0;
|
||||
lci._prevstkbase = (SQInt32) (stackbase - _stackbase);
|
||||
lci._ncalls = 1;
|
||||
|
@@ -63,7 +63,7 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
||||
{
|
||||
/* Get the AIInfo */
|
||||
SQUserPointer instance = nullptr;
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, 0)) || instance == nullptr) return sq_throwerror(vm, "Pass an instance of a child class of AIInfo to RegisterAI");
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, nullptr)) || instance == nullptr) return sq_throwerror(vm, "Pass an instance of a child class of AIInfo to RegisterAI");
|
||||
AIInfo *info = (AIInfo *)instance;
|
||||
|
||||
SQInteger res = ScriptInfo::Constructor(vm, info);
|
||||
@@ -107,7 +107,7 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
||||
{
|
||||
/* Get the AIInfo */
|
||||
SQUserPointer instance;
|
||||
sq_getinstanceup(vm, 2, &instance, 0);
|
||||
sq_getinstanceup(vm, 2, &instance, nullptr);
|
||||
AIInfo *info = (AIInfo *)instance;
|
||||
info->api_version = nullptr;
|
||||
|
||||
|
@@ -393,8 +393,7 @@ set_name:;
|
||||
MarkWholeScreenDirty();
|
||||
|
||||
if (c->is_ai) {
|
||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
||||
cni->FillData(c);
|
||||
CompanyNewsInformation *cni = new CompanyNewsInformation(c);
|
||||
SetDParam(0, STR_NEWS_COMPANY_LAUNCH_TITLE);
|
||||
SetDParam(1, STR_NEWS_COMPANY_LAUNCH_DESCRIPTION);
|
||||
SetDParamStr(2, cni->company_name);
|
||||
@@ -782,21 +781,19 @@ void CompaniesYearlyLoop()
|
||||
* @param c the current company.
|
||||
* @param other the other company (use \c nullptr if not relevant).
|
||||
*/
|
||||
void CompanyNewsInformation::FillData(const Company *c, const Company *other)
|
||||
CompanyNewsInformation::CompanyNewsInformation(const Company *c, const Company *other)
|
||||
{
|
||||
SetDParam(0, c->index);
|
||||
GetString(this->company_name, STR_COMPANY_NAME, lastof(this->company_name));
|
||||
this->company_name = GetString(STR_COMPANY_NAME);
|
||||
|
||||
if (other == nullptr) {
|
||||
*this->other_company_name = '\0';
|
||||
} else {
|
||||
if (other != nullptr) {
|
||||
SetDParam(0, other->index);
|
||||
GetString(this->other_company_name, STR_COMPANY_NAME, lastof(this->other_company_name));
|
||||
this->other_company_name = GetString(STR_COMPANY_NAME);
|
||||
c = other;
|
||||
}
|
||||
|
||||
SetDParam(0, c->index);
|
||||
GetString(this->president_name, STR_PRESIDENT_NAME_MANAGER, lastof(this->president_name));
|
||||
this->president_name = GetString(STR_PRESIDENT_NAME_MANAGER);
|
||||
|
||||
this->colour = c->colour;
|
||||
this->face = c->face;
|
||||
@@ -921,8 +918,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
|
||||
/* Delete any open window of the company */
|
||||
DeleteCompanyWindows(c->index);
|
||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
||||
cni->FillData(c);
|
||||
CompanyNewsInformation *cni = new CompanyNewsInformation(c);
|
||||
|
||||
/* Show the bankrupt news */
|
||||
SetDParam(0, STR_NEWS_COMPANY_BANKRUPT_TITLE);
|
||||
|
@@ -634,8 +634,7 @@ static void CompanyCheckBankrupt(Company *c)
|
||||
|
||||
/* Warn about bankruptcy after 3 months */
|
||||
case 4: {
|
||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
||||
cni->FillData(c);
|
||||
CompanyNewsInformation *cni = new CompanyNewsInformation(c);
|
||||
SetDParam(0, STR_NEWS_COMPANY_IN_TROUBLE_TITLE);
|
||||
SetDParam(1, STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION);
|
||||
SetDParamStr(2, cni->company_name);
|
||||
@@ -2261,8 +2260,7 @@ static void DoAcquireCompany(Company *c)
|
||||
|
||||
DEBUG(desync, 1, "buy_company: date{%08x; %02x; %02x}, buyer: %u, bought: %u", _date, _date_fract, _tick_skip_counter, (uint) _current_company, (uint) ci);
|
||||
|
||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
||||
cni->FillData(c, Company::Get(_current_company));
|
||||
CompanyNewsInformation *cni = new CompanyNewsInformation(c, Company::Get(_current_company));
|
||||
|
||||
SetDParam(0, STR_NEWS_COMPANY_MERGER_TITLE);
|
||||
SetDParam(1, c->bankrupt_value == 0 ? STR_NEWS_MERGER_TAKEOVER_TITLE : STR_NEWS_COMPANY_MERGER_DESCRIPTION);
|
||||
|
@@ -889,7 +889,7 @@ public:
|
||||
this->fios_items_shown[i] = this->string_filter.GetState();
|
||||
if (this->fios_items_shown[i]) items_shown_count++;
|
||||
|
||||
if (&(this->fios_items[i]) == this->selected && this->fios_items_shown[i] == false) {
|
||||
if (&(this->fios_items[i]) == this->selected && !this->fios_items_shown[i]) {
|
||||
/* The selected element has been filtered out */
|
||||
this->selected = nullptr;
|
||||
this->OnInvalidateData(SLIWD_SELECTION_CHANGES);
|
||||
|
@@ -54,7 +54,7 @@ template <> const char *GetClassName<GameInfo, ST_GS>() { return "GSInfo"; }
|
||||
{
|
||||
/* Get the GameInfo */
|
||||
SQUserPointer instance = nullptr;
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, 0)) || instance == nullptr) return sq_throwerror(vm, "Pass an instance of a child class of GameInfo to RegisterGame");
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, nullptr)) || instance == nullptr) return sq_throwerror(vm, "Pass an instance of a child class of GameInfo to RegisterGame");
|
||||
GameInfo *info = (GameInfo *)instance;
|
||||
|
||||
SQInteger res = ScriptInfo::Constructor(vm, info);
|
||||
|
@@ -890,6 +890,11 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
|
||||
|
||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subvenció caducada:{}{}El transport de {STRING} des de {STRING} fins a {STRING} no tindrà subvenció
|
||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvenció retirada:{}{}El transport de {STRING} des de {STRING} fins a {STRING} ja no està subvencionat
|
||||
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Oferta de subvenció per a un servei:{}{}La primera companyia en transportar {STRING} des de {STRING} fins a {STRING} tindrà una subvenció de {NUM} any{P "" s} per part de l'autoritat local
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} des de {STRING} fins a {STRING} rebrà uns ingressos addicionals del 50% durant {NUM} any{P "" s}
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} des de {STRING} fins a {STRING} ingressarà el doble de la tarifa habitual durant {NUM} any{P "" s}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} des de {STRING} fins a {STRING} ingressarà el triple de la tarifa habitual durant {NUM} any{P "" s}
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} des de {STRING} fins a {STRING} ingressarà el quàdruple de la tarifa habitual durant {NUM} any{P "" s}
|
||||
|
||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Trànsit caòtic a {TOWN}{}{}El programa de reconstrucció dels carrers patrocinat per {STRING} porta 6 mesos de misèria als automobilistes
|
||||
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopoli de transports
|
||||
@@ -1205,6 +1210,10 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Nombre d'avarie
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controla cada quan els vehicles revisats inadequadament s'espatllen
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplicador del subsidi: {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Fixa quant es paga pels transports subsidiats
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION :Durada dels subsidis: {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Establiu el nombre d'anys que duren els subsidis.
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} any{P "" s}
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Sense subsidis
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Costos de construcció: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Fixa el nivell de construcció i els preus de compra
|
||||
STR_CONFIG_SETTING_RECESSIONS :Recessions: {STRING}
|
||||
|
@@ -889,6 +889,11 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
|
||||
|
||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsidieaanbod is verlopen:{}{}{STRING} van {STRING} naar {STRING} wordt nu niet meer gesubsidieerd
|
||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidie ingetrokken:{}{}{STRING}route van {STRING} naar {STRING} wordt nu niet meer gesubsidieerd
|
||||
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsidie aangeboden:{}{}Eerste {STRING}route van {STRING} naar {STRING} krijgt {NUM} jaar lang subsidie van de gemeente!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt de volgende {NUM} jaar 50% extra betaald!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt de volgende {NUM} jaar dubbel betaald!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt devolgende {NUM} jaar driedubbel betaald!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt de volgende {NUM} jaar vierdubbel betaald!
|
||||
|
||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Verkeerschaos in {TOWN}!{}{}Wegreconstructie betaald door {STRING} zorgt voor 6 maanden van misère bij weggebruikers!
|
||||
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopolie!
|
||||
@@ -1204,6 +1209,10 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Voertuigstoring
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Bepaal hoe vaak onvoldoende onderhouden voertuigen kapot kunnen gaan
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidiefactor: {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Instellen hoeveel wordt betaald voor gesubsidieerde verbindingen
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION :Duur van subsidie: {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Bepaal het aantal jaar dat de subsidie wordt verleend
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} jaar{P "" ""}
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Geen subsidie
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Bouwkosten: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Het niveau van bouw- en aankoopkosten instellen
|
||||
STR_CONFIG_SETTING_RECESSIONS :Recessies: {STRING}
|
||||
|
@@ -2592,6 +2592,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(New company)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company and join it
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}This is you
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}This is the host of the game
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} client{P "" s} / {NUM} compan{P y ies}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban
|
||||
|
@@ -889,6 +889,11 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
|
||||
|
||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Offer of subsidy expired:{}{}{STRING} from {STRING} to {STRING} will now not attract a subsidy
|
||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidy withdrawn:{}{}{STRING} service from {STRING} to {STRING} is no longer subsidized
|
||||
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Service subsidy offered:{}{}First {STRING} service from {STRING} to {STRING} will attract a {NUM} year subsidy from the local authority!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Service subsidy awarded to {STRING}!{}{}{STRING} service from {STRING} to {STRING} will pay 50% extra for the next {NUM} year{P "" s}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Service subsidy awarded to {STRING}!{}{}{STRING} service from {STRING} to {STRING} will pay double rates for the next {NUM} year{P "" s}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Service subsidy awarded to {STRING}!{}{}{STRING} service from {STRING} to {STRING} will pay triple rates for the next {NUM} year{P "" s}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Service subsidy awarded to {STRING}!{}{}{STRING} service from {STRING} to {STRING} will pay quadruple rates for the next {NUM} year{P "" s}!
|
||||
|
||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Traffic chaos in {TOWN}!{}{}Road rebuilding program funded by {STRING} brings 6 months of misery to motorists!
|
||||
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transport monopoly!
|
||||
@@ -1204,6 +1209,10 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Vehicle breakdo
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Control how often inadequately maintained vehicles may break down
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidy multiplier: {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Set how much is paid for subsidized connections
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION :Subsidy duration: {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Set the number of years for which a subsidy is awarded
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} year{P "" s}
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :No subsidies
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Construction costs: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Set level of construction and purchase costs
|
||||
STR_CONFIG_SETTING_RECESSIONS :Recessions: {STRING}
|
||||
|
@@ -2159,6 +2159,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Uusi yhtiö)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Perusta uusi yhtiö ja liity siihen
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tämä olet sinä
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Tämä on pelin ylläpitäjä
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} pelaaja{P "" a} / {NUM} yhtiö{P "" tä}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Potki
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Estä
|
||||
@@ -2316,7 +2317,7 @@ STR_CONTENT_DETAIL_SUBTITLE_SELECTED :{SILVER}Olet va
|
||||
STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Tämä vaatimus on valittu ladattavaksi
|
||||
STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Sinulla on jo tämä
|
||||
STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Tämä sisältö on tuntematon, ja sitä ei voida ladata OpenTTD:ssä
|
||||
STR_CONTENT_DETAIL_UPDATE :{SILVER}Tämä korvaa sisällön {STRING}
|
||||
STR_CONTENT_DETAIL_UPDATE :{SILVER}Tällä korvataan olemassa oleva {STRING}
|
||||
STR_CONTENT_DETAIL_NAME :{SILVER}Nimi: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_VERSION :{SILVER}Versio: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_DESCRIPTION :{SILVER}Kuvaus: {WHITE}{STRING}
|
||||
|
@@ -19,11 +19,26 @@
|
||||
##id 0x0000
|
||||
STR_NULL :
|
||||
STR_EMPTY :
|
||||
STR_UNDEFINED :(अपरिभाषित सूत्र)
|
||||
STR_JUST_NOTHING :कुछ नहीं
|
||||
|
||||
# Cargo related strings
|
||||
# Plural cargo name
|
||||
STR_CARGO_PLURAL_NOTHING :
|
||||
STR_CARGO_PLURAL_PASSENGERS :यात्रीगण
|
||||
STR_CARGO_PLURAL_COAL :कोयला
|
||||
STR_CARGO_PLURAL_MAIL :डाक
|
||||
STR_CARGO_PLURAL_OIL :तेल
|
||||
STR_CARGO_PLURAL_LIVESTOCK :पशुधन
|
||||
STR_CARGO_PLURAL_GOODS :वस्तुएं
|
||||
STR_CARGO_PLURAL_GRAIN :अन्न
|
||||
STR_CARGO_PLURAL_WOOD :काष्ठ
|
||||
STR_CARGO_PLURAL_IRON_ORE :लौह अयस्क
|
||||
STR_CARGO_PLURAL_STEEL :इस्पात
|
||||
STR_CARGO_PLURAL_VALUABLES :मूल्यवान वस्तुएं
|
||||
STR_CARGO_PLURAL_COPPER_ORE :ताम्र अयस्क
|
||||
STR_CARGO_PLURAL_MAIZE :मक्के
|
||||
STR_CARGO_PLURAL_FRUIT :फल
|
||||
|
||||
# Singular cargo name
|
||||
STR_CARGO_SINGULAR_NOTHING :
|
||||
@@ -222,7 +237,7 @@ STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLAC
|
||||
# Game options window
|
||||
|
||||
############ start of currency region
|
||||
STR_GAME_OPTIONS_CURRENCY_FIM :मार्का, फिनलैंड (FIM)
|
||||
STR_GAME_OPTIONS_CURRENCY_FIM :फिनलैंड मार्का (FIM)
|
||||
STR_GAME_OPTIONS_CURRENCY_HKD :हाँग काँग डॉलर (एचकेडी)
|
||||
############ end of currency region
|
||||
|
||||
@@ -358,6 +373,9 @@ STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}अप
|
||||
STR_QUIT_YES :{BLACK}हाँ
|
||||
|
||||
# Abandon game
|
||||
STR_ABANDON_GAME_CAPTION :{WHITE}खेल छोड़ें
|
||||
STR_ABANDON_GAME_QUERY :{YELLOW}क्या आप वास्तव में खेल छोड़ना चाहते हैं?
|
||||
STR_ABANDON_SCENARIO_QUERY :{YELLOW}क्या आप वास्तव में यह परिदृश्य छोड़ना चाहते हैं?
|
||||
|
||||
# Cheat window
|
||||
|
||||
@@ -418,6 +436,7 @@ STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}उद
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
|
||||
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}संपर्क विच्छेद संभावित
|
||||
|
||||
# Network related errors
|
||||
############ Leave those lines in this order!!
|
||||
@@ -463,8 +482,10 @@ STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}डा
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :मानक स्टेशन
|
||||
STR_STATION_CLASS_WAYP :पथ-संकेत
|
||||
|
||||
# Signal window
|
||||
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}खींचते समय संकेतों के बीच की दूरी
|
||||
|
||||
# Bridge selection window
|
||||
|
||||
@@ -495,6 +516,7 @@ STR_AIRPORT_CLASS_SMALL :लघु व
|
||||
|
||||
# Object construction window
|
||||
|
||||
STR_OBJECT_CLASS_LTHS :प्रकाश स्तम्भ
|
||||
|
||||
# Tree planting window (last eight for SE only)
|
||||
|
||||
@@ -511,10 +533,12 @@ STR_FOUND_TOWN_CITY :{BLACK}शह
|
||||
# Fund new industry window
|
||||
|
||||
# Industry cargoes window
|
||||
STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}उद्योग चुनें
|
||||
|
||||
# Land area window
|
||||
|
||||
# Description of land area of different tiles
|
||||
STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :रिक्त भूमि
|
||||
|
||||
|
||||
|
||||
@@ -542,6 +566,7 @@ STR_FRAMERATE_BYTES_BAD :{RED}{BYTES}
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMETIME_CAPTION_GL_ECONOMY :माल प्रबंधन
|
||||
############ End of leave-in-this-order
|
||||
|
||||
|
||||
@@ -925,6 +950,7 @@ STR_ERROR_TOO_HIGH :{WHITE}... ब
|
||||
|
||||
# Town related errors
|
||||
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}नगर का नाम नहीं बदला जा सकता है...
|
||||
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... मानचित्र के किनारों के बहुत समीप
|
||||
|
||||
# Industry related errors
|
||||
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... वन केवल बर्फ की सीमा के ऊपर ही लगाये जा सकते हैं।
|
||||
@@ -951,6 +977,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... व
|
||||
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}स्वतः नवीनीकरण/बदलाव का कोई भी नियम लागू नहीं किया गया
|
||||
|
||||
# Rail construction errors
|
||||
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}पटरियों को यहाँ से नहीं हटा सकते...
|
||||
|
||||
|
||||
# Road construction errors
|
||||
|
@@ -1928,7 +1928,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING :게임 도중
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :플레이어가 게임 중에 새로운 도시를 설립하는 것을 허용합니다.
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :금지
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :허용
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :허용, 도시 구조 선택 가능
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :허용, 도로 모양 선택 가능
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :도시 화물 생성: {STRING}
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :도시의 전반적인 인구에 따라, 도시가 얼마나 많은 화물을 생산하는 지를 설정합니다.{}제곱 성장: 도시의 규모가 2배 커지면 승객을 4배 더 생산합니다.{}선형 성장: 도시의 규모가 2배 커지면 승객을 2배 더 생산합니다.
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :제곱 (기본)
|
||||
@@ -2592,6 +2592,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(새 회사)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}새 회사를 만듭니다
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}당신입니다
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}이 게임을 연 사람입니다
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}접속자 {NUM}명 / 회사 {NUM}개
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :추방
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :차단
|
||||
|
@@ -2160,6 +2160,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nova empresa)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Criar uma nova empresa e juntar-se a ela
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Este é você
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Este é o anfitrião do jogo
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cliente{P "" s} / {NUM} companhi{P a as}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Banir
|
||||
|
@@ -2313,6 +2313,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Новая к
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Основать новую транспортную компанию и присоединиться к ней
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Это вы!
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Это организатор игры
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} клиент{P "" а ов} / {NUM} компани{P я и й}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Отключить
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Заблокировать
|
||||
|
@@ -891,7 +891,10 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
|
||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subvención terminada:{}{}{STRING} de {STRING} a {STRING} ya no conlleva una subvención
|
||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvención retirada:{}{}El servicio de {STRING} desde {STRING} a {STRING} ya no está subvencionado
|
||||
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Se ofrece subvención:{}{}¡Al primer servicio de {STRING} que cubra la línea desde {STRING} a {STRING} se le otorgará una subvención durante {NUM} año{P "" s} por parte de las autoridades locales!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}¡Subvención otorgada a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} se pagará un 50% más caro durante {NUM} año{P "" s}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}¡Subvención otorgada a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} se pagará a tarifa doble durante los próximos {NUM} año{P "" s}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}¡Subvención otorgada a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} se pagará a tarifa triple durante {NUM} año{P "" s}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}¡Subvención otorgada a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} se pagará a tarifa cuádruple durante {NUM} año{P "" s}!
|
||||
|
||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}¡Colapso circulatorio en {TOWN}!{}{}¡El programa de reconstrucción de carreteras patrocinado por {STRING} causa 6 meses de problemas a los conductores!
|
||||
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}¡Monopolio de transportes!
|
||||
|
@@ -392,7 +392,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Avsluta
|
||||
############ range for settings menu starts
|
||||
STR_SETTINGS_MENU_GAME_OPTIONS :Spelinställningar
|
||||
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Inställningar
|
||||
STR_SETTINGS_MENU_SCRIPT_SETTINGS :Inställningar för AI / spelskript
|
||||
STR_SETTINGS_MENU_SCRIPT_SETTINGS :Inställningar för datorspelare / spelskript
|
||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Inställningar för NewGRF
|
||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Inställningar för genomskinlighet
|
||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Stadsnamn visas
|
||||
@@ -490,7 +490,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Ta bort alla me
|
||||
STR_ABOUT_MENU_LAND_BLOCK_INFO :Information om mark
|
||||
STR_ABOUT_MENU_SEPARATOR :
|
||||
STR_ABOUT_MENU_TOGGLE_CONSOLE :Visa/dölj konsolen
|
||||
STR_ABOUT_MENU_AI_DEBUG :Felsökning av AI / spelskript
|
||||
STR_ABOUT_MENU_AI_DEBUG :Felsökning av datorspelare / spelskript
|
||||
STR_ABOUT_MENU_SCREENSHOT :Skärmdump
|
||||
STR_ABOUT_MENU_SHOW_FRAMERATE :Visa bildfrekvens
|
||||
STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD'
|
||||
@@ -785,7 +785,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Visa all
|
||||
STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Visa senaste meddelande eller nyhet
|
||||
STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - -
|
||||
STR_STATUSBAR_PAUSED :{YELLOW}* * PAUSAD * *
|
||||
STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUSAD (väntar på updatering av länkdiagram) * *
|
||||
STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUSAD (väntar på uppdatering av länkgraf) * *
|
||||
STR_STATUSBAR_AUTOSAVE :{RED}AUTOSPARA
|
||||
STR_STATUSBAR_SAVING_GAME :{RED}* * SPARAR SPEL * *
|
||||
|
||||
@@ -830,7 +830,7 @@ STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLAC
|
||||
STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} har tagits över av {STRING}!
|
||||
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(VD)
|
||||
|
||||
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} har sponsrat byggnationen av nya staden {TOWN}!
|
||||
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} har sponsrat byggnationen av den nya staden {TOWN}!
|
||||
STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}En ny stad, kallad {TOWN}, har grundats!
|
||||
|
||||
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Ny {STRING} under konstruktion nära {TOWN}!
|
||||
@@ -889,6 +889,11 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
|
||||
|
||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subventionen har gått ut:{}{}{STRING} från {STRING} till {STRING} är inte längre subventionerad
|
||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subventionen gäller inte längre:{}{}{STRING} från {STRING} till {STRING} är inte längre subventionerad
|
||||
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Ny subvention:{}{}Första transporten av {STRING} från {STRING} till {STRING} får {NUM} års subvention från kommunen!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvention tilldelad {STRING}!{}{}{STRING} från {STRING} till {STRING} ger 50% extra de{P 4 t ""} {NUM} kommande år{P et en}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvention tilldelad {STRING}!{}{}{STRING} från {STRING} till {STRING} ger dubbelt så mycket nästa {NUM} år{P "" s}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvention tilldelad {STRING}!{}{}{STRING} från {STRING} till {STRING} ger tre gånger så mycket de{P 4 t ""} kommande {NUM} år{P et en}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvention tilldelad {STRING}!{}{}{STRING} från {STRING} till {STRING} ger fyra gånger så mycket de{P 4 t ""} kommande {NUM} år{P et en}!
|
||||
|
||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Trafikkaos i {TOWN}!{}{}Vägombyggnadsprogram bekostat av {STRING} medför 6 månader av elände för bilister!
|
||||
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopol!
|
||||
@@ -1038,7 +1043,7 @@ STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}uppdater
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafikpaket som standard
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Välj vilket grafikpaket som ska användas som standard
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} saknad{P "" e}/trasig{P "" a} fil{P "" er}
|
||||
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Ytterligare information om basgrafik-set
|
||||
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Ytterligare information om basgrafik-settet
|
||||
|
||||
STR_GAME_OPTIONS_BASE_SFX :{BLACK}Grundljudspaket
|
||||
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Välj vilket grundljudspaket som ska användas
|
||||
@@ -1199,11 +1204,15 @@ STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Räntenivå fö
|
||||
STR_CONFIG_SETTING_RUNNING_COSTS :Driftkostnader: {STRING}
|
||||
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Sätt nivån för underhålls- och driftskostnader för fordon och infrastruktur
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Konstruktionshastighet: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Begränsar antalet konstruktionshandlingar för AI-spelare
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Begränsar antalet konstruktionshandlingar för datorspelare
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Fordonshaverier: {STRING}
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Styr hur ofta otillräckligt servade fordon kan få motorstopp
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subvention (multiplikativ): {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Ange hur mycket betalt som subventionerade anslutningar ger
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION :Subventioners varaktighet: {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Ställ in hur många år en subvention ska gälla
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} år
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Inga subventioner
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Konstruktionskostnader: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Sätt nivån för konstruktions- och inköpskostnader
|
||||
STR_CONFIG_SETTING_RECESSIONS :Lågkonjunkturer: {STRING}
|
||||
@@ -1270,9 +1279,9 @@ STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :På förarsidan
|
||||
STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :På höger sida
|
||||
STR_CONFIG_SETTING_SHOWFINANCES :Visa finansfönstret vid slutet av året: {STRING}
|
||||
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Om aktiverad kommer finans-fönstret att visas vid slutet av varje år för att möjliggöra enkel granskning av den finansiella statusen för företaget.
|
||||
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nya orders är 'non-stop' om inte annat anges.{STRING}
|
||||
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nya order är 'non-stop' om inte annat anges.{STRING}
|
||||
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :I normala fall stannar ett fordon vid varje station det passerar. Aktiveras den här inställningen kommer det istället att köra igenom alla stationer på väg till dess slutdestination utan att stanna. Tänk på att den här inställningen bara definierar ett förinställt värde för nya order. Individuella order kan uttryckligen definiera båda typerna av beteende oavsett inställning
|
||||
STR_CONFIG_SETTING_STOP_LOCATION :Nya tåg-orders stannar som standard vid {STRING} av platformen
|
||||
STR_CONFIG_SETTING_STOP_LOCATION :Nya tåg-order stannar som standard vid {STRING} av platformen
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Grundinställning för var tåg stannar utmed plattformar. 'början' betyder i början av plattformen sett från var tåget kommer ifrån. 'mitten' betyder i mitten av plattformen och 'slutet' betyder så långt bort som möjligt. Notera att denna inställning endast anger grundvärdet för nya ordrar. Individuella instruktioner kan ges per orderrad explicit till valfritt värde oberoende av denna inställning.
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :början
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :mitten
|
||||
@@ -1291,7 +1300,7 @@ STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Tillåt att byg
|
||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Tillåt företag att ge pengar till städer för att bekosta nybyggnation av hus
|
||||
STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Tillåt finansiering av lokal vägrekonstruktion: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Tillåt att företag ger pengar till städer för vägbyggen och därmed saboterar för vägtransporter i staden.
|
||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Tillåt skicka pengar till andra företag: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Tillåt att skicka pengar till andra företag: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Tillåt överföring av pengar mellan företag i flerspelarläge
|
||||
STR_CONFIG_SETTING_FREIGHT_TRAINS :Godsfaktor för att simulera tunga tåg: {STRING}
|
||||
STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Ställ in påverkan av att frakta gods i tåg. Ett högre värde gör att fraktgods är mer krävande för tågen, speciellt vid lutningar
|
||||
@@ -1365,10 +1374,10 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Begränsar hur
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snögränsens höjd: {STRING}
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontrollerar på vilken höjd snön börjar i det subarktiska landskapet. Snö påverkar även industrigeneration och städers tillväxtkrav. Kan endast modifieras via Scenarioredigeraren eller beräknas via "snötäckning"
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE :Snötäckning: {STRING}
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Kontrollerar ungefärlig mängd snö på den subarktiska landskapet. Snö påverkar även industri generation och städernas tillväxtkrav. Används endast under kartgeneration. Land precis över havsnivån är alltid utan snö
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Kontrollerar ungefärlig mängd snö i det subarktiska landskapet. Snö påverkar även industrigeneration och städernas tillväxtkrav. Används endast under kartgeneration. Land precis över havsnivån är alltid utan snö
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE :Öken täckning: {STRING}
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Kontrollera ungefärligt mängd öken i tropiskt landskap. Öken påverkar även industri generation. Används bara under kartgeneration
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE :Ökentäckning: {STRING}
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Kontrollera ungefärlig mängd öken i tropiskt landskap. Öken påverkar även industrigeneration. Används bara under kartgeneration
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Terrängens svårhetsgrad: {STRING}
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis endast) Välj frekvensen av kullar: Smooth landskap har färre, mer utbredda kullar. Rough landskap har många kullar, som kan se repetitiva
|
||||
@@ -1380,14 +1389,14 @@ STR_CONFIG_SETTING_VARIETY :Varierad distri
|
||||
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis endast) Styr om kartan innehåller både bergs och flacka områden. Eftersom detta gör bara kartan flackare bör andra inställningar ställas in på bergiga
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT :Antal floder: {STRING}
|
||||
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Välj hur många floder att generera
|
||||
STR_CONFIG_SETTING_TREE_PLACER :Trädplacerings-algoritm: {STRING}
|
||||
STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Välj fördelningen av träden på kartan: "Original" växter träd jämnt utspridda, "Förbättrad" växter dem i grupper
|
||||
STR_CONFIG_SETTING_TREE_PLACER :Trädplaceringsalgoritm: {STRING}
|
||||
STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Välj hur träd fördelas över kartan: "Original" planterar träden jämnt utspridda, "Förbättrad" planterar dem i grupper
|
||||
STR_CONFIG_SETTING_TREE_PLACER_NONE :Inget
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Förbättrad
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Väg fordon: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Välj kör sida
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Höjkartans rotation: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Vägfordon: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Välj körsida
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Höjdkartans rotation: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Motsols
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Medsols
|
||||
STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Vilken nivåhöjd en platt scenario-karta får: {STRING}
|
||||
@@ -1534,7 +1543,7 @@ STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Mellan
|
||||
STR_CONFIG_SETTING_AI_PROFILE_HARD :Svår
|
||||
|
||||
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tillåt datorspelare i flerspelarläge: {STRING}
|
||||
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillåt datorstyrda AI-spelare att delta i spel för flera spelare
|
||||
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillåt datorstyrda spelare att delta i spel för flera spelare
|
||||
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes innan skript sätts i viloläge: {STRING}
|
||||
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximalt antal beräkningssteg ett skript kan utföra i en omgång
|
||||
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximalt minnesanvändning per skript: {STRING}
|
||||
@@ -1583,7 +1592,7 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Visa nyhetstidn
|
||||
STR_CONFIG_SETTING_NEWS_ADVICE :Råd / information om företagets fordon: {STRING}
|
||||
STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Visa meddelande ifall att ett fordon behöver uppmärksamhet
|
||||
STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nya fordon: {STRING}
|
||||
STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Visa nyhetstidning när en ny typ av fordon blir tillgängligt
|
||||
STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Visa nyhetstidning när en ny typ av fordon blir tillgänglig
|
||||
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Ändringar i godsacceptans: {STRING}
|
||||
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Visa meddelande vid förändring av stationers varuacceptans
|
||||
STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subventioner: {STRING}
|
||||
@@ -1704,8 +1713,8 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Inga
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial stadsstorleks-multiplikator: {STRING}
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Storstäders genomsnittliga storlek i relation till vanliga städers vid spelets början
|
||||
|
||||
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Uppdatera distributionsgrafen var {STRING}:e{NBSP}dag{P 0:2 "" s}
|
||||
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Tid mellan efterföljande omräkningar av länkgrafen. Varje omräkning beräknar planer för en komponent i grafen. Det medför att ett värde X för den här inställningen inte innebär att hela grafen uppdateras var X:e dag, bara vissa komponenter. Ju lägre värde du ställer in desto mer processorkraft kommer att behövas för beräkningarna. Ju högre värde du ställer in desto längre tid kommer det att ta innan distributionen av last börjar använda nya rutter.
|
||||
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Uppdatera distributionsgrafen var {STRING}:e{NBSP}dag
|
||||
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Tid mellan efterföljande omräkningar av länkgrafen. Varje omräkning beräknar planerna för en komponent i grafen. Det medför att ett värde X för den här inställningen inte innebär att hela grafen uppdateras var X:e dag, utan bara vissa komponenter. Ju kortare intervall du ställer in desto mer processorkraft kommer att behövas för beräkningarna. Ju längre intervall du ställer in desto längre tid kommer det att ta innan distributionen av last börjar använda nya rutter.
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME :Avsätt {STRING}{NBSP}dag{P 0:2 "" ar} för omberäkning av distributionsgraf
|
||||
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Den tid varje omberäkning av en länkgrafkomponent tillåts ta. När en omberäkning startas skapas en tråd som tillåts löpa detta antal dagar. Ju kortare du sätter denna, desto mer troligt är det att tråden inte är hinner bli färdig i tid. Då kommer spelet att stanna tills den är klar (vilket gör att det laggar). Ju längre du sätter denna, desto längre tid tar det för distributionen att uppdateras när rutter ändras.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuellt
|
||||
@@ -1769,7 +1778,7 @@ STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Lokalis
|
||||
STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafik
|
||||
STR_CONFIG_SETTING_SOUND :{ORANGE}Ljud
|
||||
STR_CONFIG_SETTING_INTERFACE :{ORANGE}Gränssnitt
|
||||
STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Generelt
|
||||
STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Generellt
|
||||
STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Vyfönster
|
||||
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Konstruktion
|
||||
STR_CONFIG_SETTING_ADVISORS :{ORANGE} Nyheter / Rådgivare
|
||||
@@ -2004,7 +2013,7 @@ STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Namn
|
||||
STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Namn på nätverksspelet
|
||||
STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
|
||||
STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Klienter
|
||||
STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Klienter online / klienter max{}Företag online / företag max
|
||||
STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Klienter online / max antal klienter{}Företag online / max antal företag
|
||||
STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA}
|
||||
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Kartstorlek
|
||||
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Kartstorlek av spelet{}Klicka för att sortera efter område
|
||||
@@ -2150,6 +2159,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nytt företag)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Skapa ett nytt företag och gå med i det
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Det här är du
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Det här är spelets värd
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" er} / {NUM} företag
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kasta ut
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Bannlys
|
||||
@@ -2252,10 +2262,10 @@ STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}De senas
|
||||
# Network related errors
|
||||
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED :Spel pausad ({STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED :Spelet är pausat ({STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Spelet är fortfarande pausat ({STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spel fortfarande pausad ({STRING}, {STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spel fortfarande pausad ({STRING}, {STRING}, {STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spelet är fortfarande pausat ({STRING}, {STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spelet är fortfarande pausat ({STRING}, {STRING}, {STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spelet är fortfarande pausat ({STRING}, {STRING}, {STRING}, {STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Spelet är fortfarande pausat ({STRING}, {STRING}, {STRING}, {STRING}, {STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spelet är opausat ({STRING})
|
||||
@@ -2263,11 +2273,11 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :antal spelare
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :ansluter klienter
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuell
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spelskript
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :Väntar på updatering av länkdiagram
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :väntar på uppdatering av länkgraf
|
||||
############ End of leave-in-this-order
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEAVING :lämnar
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} har gått med i spelet
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} har gått med i spelet (Client #{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} har gått med i spelet (Klient #{2:NUM})
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} har gått med i företag #{2:NUM}
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} har gått med som åskådare
|
||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} har startat ett nytt företag (#{2:NUM})
|
||||
@@ -2663,7 +2673,7 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Ta bort
|
||||
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Är du säker på att du vill ta bort alla industrier?
|
||||
|
||||
# Industry cargoes window
|
||||
STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrikedja för {STRING} industrin
|
||||
STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrikedja för industrin {STRING}
|
||||
STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Industrikedja för godset {STRING}
|
||||
STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Producerande industrier
|
||||
STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Mottagande industrier
|
||||
@@ -2911,9 +2921,9 @@ STR_MAPGEN_SNOW_COVERAGE :{BLACK}Snötäc
|
||||
STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Öka snötäckning med tio procent
|
||||
STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Minska snötäckning med tio procent
|
||||
STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||
STR_MAPGEN_DESERT_COVERAGE :{BLACK}Öken täckning:
|
||||
STR_MAPGEN_DESERT_COVERAGE :{BLACK}Ökentäckning:
|
||||
STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Öka ökentäckning med tio procent
|
||||
STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Minska öken täckning med tio procent
|
||||
STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Minska ökentäckning med tio procent
|
||||
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||
STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Snögränsens höjd:
|
||||
STR_MAPGEN_SNOW_LINE_UP :{BLACK}Höj snögränsens höjd ett steg
|
||||
@@ -2936,9 +2946,9 @@ STR_MAPGEN_BORDER_FREEFORM :{BLACK}Fri form
|
||||
STR_MAPGEN_BORDER_WATER :{BLACK}Vatten
|
||||
STR_MAPGEN_BORDER_RANDOM :{BLACK}På måfå
|
||||
STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}På måfå
|
||||
STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuell
|
||||
STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuella
|
||||
|
||||
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotation på höjdkarta:
|
||||
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Höjdkartans rotation:
|
||||
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Namn på höjdkarta:
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Storlek:
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
|
||||
@@ -2946,7 +2956,7 @@ STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x
|
||||
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Måltopp höjd
|
||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Högsta höjdpunkt
|
||||
STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Snötäckning (i %)
|
||||
STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Öken täckning (i %)
|
||||
STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Ökentäckning (i %)
|
||||
STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Ändra snögränsens höjd
|
||||
STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Ändra Startår
|
||||
|
||||
@@ -3231,7 +3241,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Starta
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Starta en stor lokal reklamkampanj, för att attrahera fler passagerare och gods till dina transporttjänster.{}Tillhandahåller en temporär boost till stationens betyg i en stor radie runt stadens centrum.{}Kostnad: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Bekosta ombyggnad av stadens vägnätverk.{}Orsakar ansenliga störningar för vägtrafik i upp till 6 månader.{}Kostnad: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Bygg en staty i ditt företags ära.{}Tillhandahåller en permanent boost till stations betyg i staden.{}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Bekosta uppbyggnad av nya byggnader i staden.{}Tillhandahåller en temporär boost till stadens tillväxt.{}Kostnad: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Bekosta uppbyggnad av nya byggnader i staden.{}Ger en temporär boost till stadens tillväxt.{}Kostnad: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Köp 1 års exklusiva transport rättigheter i staden.{}Lokala myndigheterna kommer inte tillåta passagerare och gods att använda dina motståndares stationer.{}Cost: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW} Muta de lokala myndigheterna för att öka din värdering, med risk för att få höga böter om du blir upptäckt.{} Kostnad: {CURRENCY_LONG}
|
||||
|
||||
@@ -3586,7 +3596,7 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nya elektriska
|
||||
STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nytt monorailfordon
|
||||
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nytt maglevfordon
|
||||
|
||||
STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nytt Vägfordon
|
||||
STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nytt vägfordon
|
||||
STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nya spårvägsfordon
|
||||
|
||||
############ range for vehicle availability starts
|
||||
@@ -4217,12 +4227,12 @@ STR_AI_DEBUG_SETTINGS :{BLACK}Inställ
|
||||
STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Ändra inställningarna för spelskriptet
|
||||
STR_AI_DEBUG_RELOAD :{BLACK}Ladda om datorspelaren
|
||||
STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Stoppa datorspelaren, ladda om skriptet och starta sedan om datorspelaren
|
||||
STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Slå på/av brytning då AI-loggmeddelande matchar brytsträngen
|
||||
STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Slå på/av brytning då datorspelares loggmeddelande matchar brytsträngen
|
||||
STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Bryt på:
|
||||
STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Bryt på
|
||||
STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}När ett AI-loggmeddelande matchar angiven sträng så kommer spelet att pausas
|
||||
STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}När ett loggmeddelande om datorspelare matchar angiven sträng så kommer spelet att pausas
|
||||
STR_AI_DEBUG_MATCH_CASE :{BLACK}Matcha VERSALER/gemener
|
||||
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Slå på/av matchning av VERSALER/gemener när AI-loggmeddelanden jämförs mot brytsträngen
|
||||
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Slå på/av matchning av VERSALER/gemener när datorspelares loggmeddelanden jämförs mot brytsträngen
|
||||
STR_AI_DEBUG_CONTINUE :{BLACK}Fortsätt
|
||||
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Opausa och fortsätt datorspelaren
|
||||
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Visa debug-utskrifter för denna datorspelare
|
||||
|
@@ -339,7 +339,7 @@ struct MainWindow : Window
|
||||
case GHK_REFRESH_SCREEN: MarkWholeScreenDirty(); break;
|
||||
|
||||
case GHK_CRASH: // Crash the game
|
||||
*(volatile byte *)0 = 0;
|
||||
*(volatile byte *)nullptr = 0;
|
||||
break;
|
||||
|
||||
case GHK_MONEY: // Gimme money
|
||||
|
@@ -45,7 +45,7 @@ TCPConnecter::~TCPConnecter()
|
||||
this->sockets.clear();
|
||||
this->sock_to_address.clear();
|
||||
|
||||
freeaddrinfo(this->ai);
|
||||
if (this->ai != nullptr) freeaddrinfo(this->ai);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -268,7 +268,7 @@ bool TCPConnecter::CheckActivity()
|
||||
timeval tv;
|
||||
tv.tv_usec = 0;
|
||||
tv.tv_sec = 0;
|
||||
int n = select(FD_SETSIZE, NULL, &write_fd, NULL, &tv);
|
||||
int n = select(FD_SETSIZE, nullptr, &write_fd, nullptr, &tv);
|
||||
/* select() failed; hopefully next try it doesn't. */
|
||||
if (n < 0) {
|
||||
/* select() normally never fails; so hopefully it works next try! */
|
||||
|
@@ -825,7 +825,7 @@ bool NetworkClientConnectGame(const std::string &connection_string, CompanyID de
|
||||
std::string resolved_connection_string = ParseGameConnectionString(connection_string, NETWORK_DEFAULT_PORT, &join_as).GetAddressAsString(false);
|
||||
|
||||
if (!_network_available) return false;
|
||||
if (!NetworkValidateClientName()) return false;
|
||||
if (!NetworkValidateOurClientName()) return false;
|
||||
|
||||
_network_join.connection_string = resolved_connection_string;
|
||||
_network_join.company = join_as;
|
||||
|
@@ -1561,7 +1561,7 @@ bool NetworkValidateClientName(std::string &client_name)
|
||||
* See \c NetworkValidateClientName(char*) for details about the functionality.
|
||||
* @return True iff the client name is valid.
|
||||
*/
|
||||
bool NetworkValidateClientName()
|
||||
bool NetworkValidateOurClientName()
|
||||
{
|
||||
return NetworkValidateClientName(_settings_client.network.client_name);
|
||||
}
|
||||
|
@@ -201,7 +201,7 @@ void NetworkSyncCommandQueue(NetworkClientSocket *cs)
|
||||
{
|
||||
for (CommandPacket *p = _local_execution_queue.Peek(); p != nullptr; p = p->next) {
|
||||
CommandPacket c = *p;
|
||||
c.callback = 0;
|
||||
c.callback = nullptr;
|
||||
cs->outgoing_queue.Append(std::move(c));
|
||||
}
|
||||
}
|
||||
|
@@ -36,7 +36,7 @@ extern StringList _network_ban_list;
|
||||
|
||||
byte NetworkSpectatorCount();
|
||||
bool NetworkIsValidClientName(const std::string_view client_name);
|
||||
bool NetworkValidateClientName();
|
||||
bool NetworkValidateOurClientName();
|
||||
bool NetworkValidateClientName(std::string &client_name);
|
||||
bool NetworkValidateServerName(std::string &server_name);
|
||||
void NetworkUpdateClientName(const std::string &client_name);
|
||||
|
@@ -1278,7 +1278,7 @@ static WindowDesc _network_start_server_window_desc(
|
||||
|
||||
static void ShowNetworkStartServerWindow()
|
||||
{
|
||||
if (!NetworkValidateClientName()) return;
|
||||
if (!NetworkValidateOurClientName()) return;
|
||||
|
||||
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME);
|
||||
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY);
|
||||
@@ -1572,7 +1572,7 @@ static WindowDesc _network_lobby_window_desc(
|
||||
*/
|
||||
static void ShowNetworkLobbyWindow(NetworkGameList *ngl)
|
||||
{
|
||||
if (!NetworkValidateClientName()) return;
|
||||
if (!NetworkValidateOurClientName()) return;
|
||||
|
||||
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_START);
|
||||
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME);
|
||||
@@ -1642,7 +1642,10 @@ static const NWidgetPart _nested_client_list_widgets[] = {
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_CL_MATRIX), SetMinimalSize(180, 0), SetResize(1, 1), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_CL_SCROLLBAR),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_COMPANY_COUNT), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetPadding(2, 1, 2, 1), SetAlignment(SA_CENTER), SetDataTip(STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_CL_SCROLLBAR),
|
||||
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
|
||||
@@ -2065,6 +2068,11 @@ public:
|
||||
case WID_CL_CLIENT_NAME:
|
||||
SetDParamStr(0, _settings_client.network.client_name);
|
||||
break;
|
||||
|
||||
case WID_CL_CLIENT_COMPANY_COUNT:
|
||||
SetDParam(0, NetworkClientInfo::GetNumItems());
|
||||
SetDParam(1, Company::GetNumItems());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -309,7 +309,7 @@ bool Convert8bitBooleanCallback(const struct GRFFile *grffile, uint16 cbid, uint
|
||||
*/
|
||||
template <size_t Tcnt>
|
||||
struct GRFFilePropsBase {
|
||||
GRFFilePropsBase() : local_id(0), grffile(0)
|
||||
GRFFilePropsBase() : local_id(0), grffile(nullptr)
|
||||
{
|
||||
/* The lack of some compilers to provide default constructors complying to the specs
|
||||
* requires us to zero the stuff ourself. */
|
||||
|
@@ -15,7 +15,7 @@
|
||||
#include "station_type.h"
|
||||
#include "industry_type.h"
|
||||
|
||||
void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1 = NR_NONE, uint32 ref1 = UINT32_MAX, NewsReferenceType reftype2 = NR_NONE, uint32 ref2 = UINT32_MAX, void *free_data = nullptr);
|
||||
void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1 = NR_NONE, uint32 ref1 = UINT32_MAX, NewsReferenceType reftype2 = NR_NONE, uint32 ref2 = UINT32_MAX, const NewsAllocatedData *data = nullptr);
|
||||
|
||||
static inline void AddCompanyNewsItem(StringID string, CompanyNewsInformation *cni)
|
||||
{
|
||||
@@ -42,9 +42,9 @@ static inline void AddVehicleAdviceNewsItem(StringID string, VehicleID vehicle)
|
||||
AddNewsItem(string, NT_ADVICE, NF_INCOLOUR | NF_SMALL | NF_VEHICLE_PARAM0, NR_VEHICLE, vehicle);
|
||||
}
|
||||
|
||||
static inline void AddTileNewsItem(StringID string, NewsType type, TileIndex tile, void *free_data = nullptr, StationID station = INVALID_STATION)
|
||||
static inline void AddTileNewsItem(StringID string, NewsType type, TileIndex tile, const NewsAllocatedData *data = nullptr, StationID station = INVALID_STATION)
|
||||
{
|
||||
AddNewsItem(string, type, NF_NO_TRANSPARENT | NF_SHADE | NF_THIN, NR_TILE, tile, station == INVALID_STATION ? NR_NONE : NR_STATION, station, free_data);
|
||||
AddNewsItem(string, type, NF_NO_TRANSPARENT | NF_SHADE | NF_THIN, NR_TILE, tile, station == INVALID_STATION ? NR_NONE : NR_STATION, station, data);
|
||||
}
|
||||
|
||||
static inline void AddIndustryNewsItem(StringID string, NewsType type, IndustryID industry)
|
||||
|
@@ -355,7 +355,7 @@ struct NewsWindow : Window {
|
||||
break;
|
||||
|
||||
case WID_N_MGR_NAME:
|
||||
SetDParamStr(0, static_cast<const CompanyNewsInformation *>(this->ni->free_data)->president_name);
|
||||
SetDParamStr(0, static_cast<const CompanyNewsInformation *>(this->ni->data.get())->president_name);
|
||||
str = STR_JUST_RAW_STRING;
|
||||
break;
|
||||
|
||||
@@ -433,13 +433,13 @@ struct NewsWindow : Window {
|
||||
break;
|
||||
|
||||
case WID_N_MGR_FACE: {
|
||||
const CompanyNewsInformation *cni = (const CompanyNewsInformation*)this->ni->free_data;
|
||||
const CompanyNewsInformation *cni = static_cast<const CompanyNewsInformation*>(this->ni->data.get());
|
||||
DrawCompanyManagerFace(cni->face, cni->colour, r.left, r.top);
|
||||
GfxFillRect(r.left, r.top, r.right, r.bottom, PALETTE_NEWSPAPER, FILLRECT_RECOLOUR);
|
||||
break;
|
||||
}
|
||||
case WID_N_MGR_NAME: {
|
||||
const CompanyNewsInformation *cni = (const CompanyNewsInformation*)this->ni->free_data;
|
||||
const CompanyNewsInformation *cni = static_cast<const CompanyNewsInformation*>(this->ni->data.get());
|
||||
SetDParamStr(0, cni->president_name);
|
||||
DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_JUST_RAW_STRING, TC_FROMSTRING, SA_CENTER);
|
||||
break;
|
||||
@@ -642,8 +642,7 @@ static bool ReadyForNextTickerItem()
|
||||
|
||||
/* Ticker message
|
||||
* Check if the status bar message is still being displayed? */
|
||||
if (IsNewsTickerShown()) return false;
|
||||
return true;
|
||||
return !IsNewsTickerShown();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -774,6 +773,27 @@ static void DeleteNewsItem(NewsItem *ni)
|
||||
SetWindowDirty(WC_MESSAGE_HISTORY, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new newsitem to be shown.
|
||||
* @param string_id String to display.
|
||||
* @param type The type of news.
|
||||
* @param flags Flags related to how to display the news.
|
||||
* @param reftype1 Type of ref1.
|
||||
* @param ref1 Reference 1 to some object: Used for a possible viewport, scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||
* @param reftype2 Type of ref2.
|
||||
* @param ref2 Reference 2 to some object: Used for scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||
* @param data Pointer to data that must be released once the news message is cleared.
|
||||
*
|
||||
* @see NewsSubtype
|
||||
*/
|
||||
NewsItem::NewsItem(StringID string_id, NewsType type, NewsFlag flags, NewsReferenceType reftype1, uint32 ref1, NewsReferenceType reftype2, uint32 ref2, const NewsAllocatedData *data) :
|
||||
string_id(string_id), date(_date), type(type), flags(flags), reftype1(reftype1), reftype2(reftype2), ref1(ref1), ref2(ref2), data(data)
|
||||
{
|
||||
/* show this news message in colour? */
|
||||
if (_cur_year >= _settings_client.gui.coloured_news_year) this->flags |= NF_INCOLOUR;
|
||||
CopyOutDParam(this->params, 0, lengthof(this->params));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new newsitem to be shown.
|
||||
* @param string String to display
|
||||
@@ -783,31 +803,16 @@ static void DeleteNewsItem(NewsItem *ni)
|
||||
* @param ref1 Reference 1 to some object: Used for a possible viewport, scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||
* @param reftype2 Type of ref2
|
||||
* @param ref2 Reference 2 to some object: Used for scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||
* @param free_data Pointer to data that must be freed once the news message is cleared
|
||||
* @param data Pointer to data that must be released once the news message is cleared.
|
||||
*
|
||||
* @see NewsSubtype
|
||||
*/
|
||||
void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1, uint32 ref1, NewsReferenceType reftype2, uint32 ref2, void *free_data)
|
||||
void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1, uint32 ref1, NewsReferenceType reftype2, uint32 ref2, const NewsAllocatedData *data)
|
||||
{
|
||||
if (_game_mode == GM_MENU) return;
|
||||
|
||||
/* Create new news item node */
|
||||
NewsItem *ni = new NewsItem;
|
||||
|
||||
ni->string_id = string;
|
||||
ni->type = type;
|
||||
ni->flags = flags;
|
||||
|
||||
/* show this news message in colour? */
|
||||
if (_cur_year >= _settings_client.gui.coloured_news_year) ni->flags |= NF_INCOLOUR;
|
||||
|
||||
ni->reftype1 = reftype1;
|
||||
ni->reftype2 = reftype2;
|
||||
ni->ref1 = ref1;
|
||||
ni->ref2 = ref2;
|
||||
ni->free_data = free_data;
|
||||
ni->date = _date;
|
||||
CopyOutDParam(ni->params, 0, lengthof(ni->params));
|
||||
NewsItem *ni = new NewsItem(string, type, flags, reftype1, ref1, reftype2, ref2, data);
|
||||
|
||||
if (_total_news++ == 0) {
|
||||
assert(_oldest_news == nullptr);
|
||||
@@ -886,8 +891,8 @@ CommandCost CmdCustomNewsItem(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
|
||||
if (company != INVALID_OWNER && company != _local_company) return CommandCost();
|
||||
|
||||
if (flags & DC_EXEC) {
|
||||
char *news = stredup(text);
|
||||
SetDParamStr(0, news);
|
||||
NewsStringData *news = new NewsStringData(text);
|
||||
SetDParamStr(0, news->string);
|
||||
AddNewsItem(STR_NEWS_CUSTOM_ITEM, type, NF_NORMAL, reftype1, p2, NR_NONE, UINT32_MAX, news);
|
||||
}
|
||||
|
||||
|
@@ -115,6 +115,12 @@ struct NewsTypeData {
|
||||
NewsDisplay GetDisplay() const;
|
||||
};
|
||||
|
||||
/** Container for any custom data that must be deleted after the news item has reached end-of-life. */
|
||||
struct NewsAllocatedData {
|
||||
virtual ~NewsAllocatedData() {}
|
||||
};
|
||||
|
||||
|
||||
/** Information about a single item of news. */
|
||||
struct NewsItem {
|
||||
NewsItem *prev; ///< Previous news item
|
||||
@@ -129,14 +135,17 @@ struct NewsItem {
|
||||
uint32 ref1; ///< Reference 1 to some object: Used for a possible viewport, scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||
uint32 ref2; ///< Reference 2 to some object: Used for scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||
|
||||
void *free_data; ///< Data to be freed when the news item has reached its end.
|
||||
|
||||
~NewsItem()
|
||||
{
|
||||
free(this->free_data);
|
||||
}
|
||||
std::unique_ptr<const NewsAllocatedData> data; ///< Custom data for the news item that will be deallocated (deleted) when the news item has reached its end.
|
||||
|
||||
uint64 params[10]; ///< Parameters for string resolving.
|
||||
|
||||
NewsItem(StringID string_id, NewsType type, NewsFlag flags, NewsReferenceType reftype1, uint32 ref1, NewsReferenceType reftype2, uint32 ref2, const NewsAllocatedData *data);
|
||||
};
|
||||
|
||||
/** Container for a single string to be passed as NewsAllocatedData. */
|
||||
struct NewsStringData : NewsAllocatedData {
|
||||
std::string string; ///< The string to retain.
|
||||
NewsStringData(const std::string &str) : string(str) {}
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -145,15 +154,15 @@ struct NewsItem {
|
||||
* of the companies and the fact that the company data is reset,
|
||||
* resulting in wrong names and such.
|
||||
*/
|
||||
struct CompanyNewsInformation {
|
||||
char company_name[64]; ///< The name of the company
|
||||
char president_name[64]; ///< The name of the president
|
||||
char other_company_name[64]; ///< The name of the company taking over this one
|
||||
struct CompanyNewsInformation : NewsAllocatedData {
|
||||
std::string company_name; ///< The name of the company
|
||||
std::string president_name; ///< The name of the president
|
||||
std::string other_company_name; ///< The name of the company taking over this one
|
||||
|
||||
uint32 face; ///< The face of the president
|
||||
byte colour; ///< The colour related to the company
|
||||
|
||||
void FillData(const struct Company *c, const struct Company *other = nullptr);
|
||||
CompanyNewsInformation(const struct Company *c, const struct Company *other = nullptr);
|
||||
};
|
||||
|
||||
#endif /* NEWS_TYPE_H */
|
||||
|
@@ -191,13 +191,13 @@ const char *GetCurrentLocale(const char *)
|
||||
bool GetClipboardContents(char *buffer, const char *last)
|
||||
{
|
||||
NSPasteboard *pb = [ NSPasteboard generalPasteboard ];
|
||||
NSArray *types = [ NSArray arrayWithObject:NSStringPboardType ];
|
||||
NSArray *types = [ NSArray arrayWithObject:NSPasteboardTypeString ];
|
||||
NSString *bestType = [ pb availableTypeFromArray:types ];
|
||||
|
||||
/* Clipboard has no text data available. */
|
||||
if (bestType == nil) return false;
|
||||
|
||||
NSString *string = [ pb stringForType:NSStringPboardType ];
|
||||
NSString *string = [ pb stringForType:NSPasteboardTypeString ];
|
||||
if (string == nil || [ string length ] == 0) return false;
|
||||
|
||||
strecpy(buffer, [ string UTF8String ], last);
|
||||
|
@@ -27,6 +27,10 @@
|
||||
#define HAVE_OSX_1011_SDK
|
||||
#endif
|
||||
|
||||
#ifdef MAC_OS_X_VERSION_10_12
|
||||
#define HAVE_OSX_1012_SDK
|
||||
#endif
|
||||
|
||||
/* It would seem that to ensure backward compatibility we have to ensure that we have defined MAC_OS_X_VERSION_10_x everywhere */
|
||||
#ifndef MAC_OS_X_VERSION_10_3
|
||||
#define MAC_OS_X_VERSION_10_3 1030
|
||||
|
@@ -51,10 +51,10 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
||||
/* Resolve the name and populate the information structure */
|
||||
pat = FcNameParse((FcChar8 *)font_family);
|
||||
if (font_style != nullptr) FcPatternAddString(pat, FC_STYLE, (FcChar8 *)font_style);
|
||||
FcConfigSubstitute(0, pat, FcMatchPattern);
|
||||
FcConfigSubstitute(nullptr, pat, FcMatchPattern);
|
||||
FcDefaultSubstitute(pat);
|
||||
fs = FcFontSetCreate();
|
||||
match = FcFontMatch(0, pat, &result);
|
||||
match = FcFontMatch(nullptr, pat, &result);
|
||||
|
||||
if (fs != nullptr && match != nullptr) {
|
||||
int i;
|
||||
|
@@ -278,7 +278,7 @@ bool GetClipboardContents(char *buffer, const char *last)
|
||||
}
|
||||
|
||||
char *clip = SDL_GetClipboardText();
|
||||
if (clip != NULL) {
|
||||
if (clip != nullptr) {
|
||||
strecpy(buffer, clip, last);
|
||||
SDL_free(clip);
|
||||
return true;
|
||||
|
@@ -817,9 +817,7 @@ static bool CanEnterTile(TileIndex tile, DiagDirection dir, AyStarUserData *user
|
||||
|
||||
/* Depots, standard roadstops and single tram bits can only be entered from one direction */
|
||||
DiagDirection single_entry = GetTileSingleEntry(tile, user->type, user->subtype);
|
||||
if (single_entry != INVALID_DIAGDIR && single_entry != ReverseDiagDir(dir)) return false;
|
||||
|
||||
return true;
|
||||
return single_entry == INVALID_DIAGDIR || single_entry == ReverseDiagDir(dir);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -825,7 +825,7 @@ bool AfterLoadGame()
|
||||
if (IsSavegameVersionBefore(SLV_6, 1)) _settings_game.pf.forbid_90_deg = false;
|
||||
if (IsSavegameVersionBefore(SLV_21)) _settings_game.vehicle.train_acceleration_model = 0;
|
||||
if (IsSavegameVersionBefore(SLV_90)) _settings_game.vehicle.plane_speed = 4;
|
||||
if (IsSavegameVersionBefore(SLV_95)) _settings_game.vehicle.dynamic_engines = 0;
|
||||
if (IsSavegameVersionBefore(SLV_95)) _settings_game.vehicle.dynamic_engines = false;
|
||||
if (IsSavegameVersionBefore(SLV_96)) _settings_game.economy.station_noise_level = false;
|
||||
if (IsSavegameVersionBefore(SLV_133)) {
|
||||
_settings_game.vehicle.train_slope_steepness = 3;
|
||||
|
@@ -65,7 +65,7 @@ static void Load_AIPL()
|
||||
while ((index = (CompanyID)SlIterateArray()) != (CompanyID)-1) {
|
||||
if (index >= MAX_COMPANIES) SlErrorCorrupt("Too many AI configs");
|
||||
|
||||
_ai_saveload_is_random = 0;
|
||||
_ai_saveload_is_random = false;
|
||||
_ai_saveload_version = -1;
|
||||
SlObject(nullptr, _ai_company);
|
||||
|
||||
|
@@ -468,7 +468,7 @@ int64 ScriptList::Begin()
|
||||
|
||||
int64 ScriptList::Next()
|
||||
{
|
||||
if (this->initialized == false) {
|
||||
if (!this->initialized) {
|
||||
DEBUG(script, 0, "Next() is invalid as Begin() is never called");
|
||||
return 0;
|
||||
}
|
||||
@@ -482,7 +482,7 @@ bool ScriptList::IsEmpty()
|
||||
|
||||
bool ScriptList::IsEnd()
|
||||
{
|
||||
if (this->initialized == false) {
|
||||
if (!this->initialized) {
|
||||
DEBUG(script, 0, "IsEnd() is invalid as Begin() is never called");
|
||||
return true;
|
||||
}
|
||||
|
@@ -109,7 +109,7 @@ SQInteger ScriptText::_SetParam(int parameter, HSQUIRRELVM vm)
|
||||
sq_pop(vm, 3);
|
||||
|
||||
/* Get the 'real' instance of this class */
|
||||
sq_getinstanceup(vm, -1, &real_instance, 0);
|
||||
sq_getinstanceup(vm, -1, &real_instance, nullptr);
|
||||
if (real_instance == nullptr) return SQ_ERROR;
|
||||
|
||||
ScriptText *value = static_cast<ScriptText *>(real_instance);
|
||||
|
@@ -273,7 +273,7 @@ void Squirrel::RunError(HSQUIRRELVM vm, const SQChar *error)
|
||||
|
||||
SQInteger Squirrel::_RunError(HSQUIRRELVM vm)
|
||||
{
|
||||
const SQChar *sErr = 0;
|
||||
const SQChar *sErr = nullptr;
|
||||
|
||||
if (sq_gettop(vm) >= 1) {
|
||||
if (SQ_SUCCEEDED(sq_getstring(vm, -1, &sErr))) {
|
||||
|
@@ -190,7 +190,7 @@ public:
|
||||
* @note This will only work just after a function-call from within Squirrel
|
||||
* to your C++ function.
|
||||
*/
|
||||
static bool GetRealInstance(HSQUIRRELVM vm, SQUserPointer *ptr) { return SQ_SUCCEEDED(sq_getinstanceup(vm, 1, ptr, 0)); }
|
||||
static bool GetRealInstance(HSQUIRRELVM vm, SQUserPointer *ptr) { return SQ_SUCCEEDED(sq_getinstanceup(vm, 1, ptr, nullptr)); }
|
||||
|
||||
/**
|
||||
* Get the Squirrel-instance pointer.
|
||||
|
@@ -754,9 +754,9 @@ namespace SQConvert {
|
||||
sq_pop(vm, 3);
|
||||
|
||||
/* Get the 'real' instance of this class */
|
||||
sq_getinstanceup(vm, 1, &real_instance, 0);
|
||||
sq_getinstanceup(vm, 1, &real_instance, nullptr);
|
||||
/* Get the real function pointer */
|
||||
sq_getuserdata(vm, nparam, &ptr, 0);
|
||||
sq_getuserdata(vm, nparam, &ptr, nullptr);
|
||||
if (real_instance == nullptr) return sq_throwerror(vm, "couldn't detect real instance of class for non-static call");
|
||||
/* Remove the userdata from the stack */
|
||||
sq_pop(vm, 1);
|
||||
@@ -796,9 +796,9 @@ namespace SQConvert {
|
||||
sq_pop(vm, 3);
|
||||
|
||||
/* Get the 'real' instance of this class */
|
||||
sq_getinstanceup(vm, 1, &real_instance, 0);
|
||||
sq_getinstanceup(vm, 1, &real_instance, nullptr);
|
||||
/* Get the real function pointer */
|
||||
sq_getuserdata(vm, nparam, &ptr, 0);
|
||||
sq_getuserdata(vm, nparam, &ptr, nullptr);
|
||||
if (real_instance == nullptr) return sq_throwerror(vm, "couldn't detect real instance of class for non-static call");
|
||||
/* Remove the userdata from the stack */
|
||||
sq_pop(vm, 1);
|
||||
@@ -820,7 +820,7 @@ namespace SQConvert {
|
||||
SQUserPointer ptr = nullptr;
|
||||
|
||||
/* Get the real function pointer */
|
||||
sq_getuserdata(vm, nparam, &ptr, 0);
|
||||
sq_getuserdata(vm, nparam, &ptr, nullptr);
|
||||
|
||||
try {
|
||||
/* Delegate it to a template that can handle this specific function */
|
||||
@@ -844,7 +844,7 @@ namespace SQConvert {
|
||||
SQUserPointer ptr = nullptr;
|
||||
|
||||
/* Get the real function pointer */
|
||||
sq_getuserdata(vm, nparam, &ptr, 0);
|
||||
sq_getuserdata(vm, nparam, &ptr, nullptr);
|
||||
/* Remove the userdata from the stack */
|
||||
sq_pop(vm, 1);
|
||||
|
||||
|
@@ -471,7 +471,7 @@ void IntSettingDesc::MakeValueValid(int32 &val) const
|
||||
uval = (uint32)this->def;
|
||||
}
|
||||
}
|
||||
val = (int32)val;
|
||||
val = (int32)uval;
|
||||
return;
|
||||
}
|
||||
case SLE_VAR_I64:
|
||||
@@ -893,7 +893,7 @@ static void UpdateConsists(int32 new_value)
|
||||
}
|
||||
|
||||
/* Check service intervals of vehicles, newvalue is value of % or day based servicing */
|
||||
static void UpdateServiceInterval(int32 new_value)
|
||||
static void UpdateAllServiceInterval(int32 new_value)
|
||||
{
|
||||
bool update_vehicles;
|
||||
VehicleDefaultSettings *vds;
|
||||
|
@@ -977,8 +977,7 @@ void BaseSettingEntry::Init(byte level)
|
||||
bool BaseSettingEntry::IsVisible(const BaseSettingEntry *item) const
|
||||
{
|
||||
if (this->IsFiltered()) return false;
|
||||
if (this == item) return true;
|
||||
return false;
|
||||
return this == item;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -248,9 +248,7 @@ static inline bool CheckAddToTodoSet(TileIndex t1, DiagDirection d1, TileIndex t
|
||||
|
||||
assert(!_tbdset.IsIn(t1, d1)); // it really shouldn't be there already
|
||||
|
||||
if (_tbdset.Remove(t2, d2)) return false;
|
||||
|
||||
return true;
|
||||
return !_tbdset.Remove(t2, d2);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -29,9 +29,6 @@
|
||||
#include <functional>
|
||||
#include <algorithm>
|
||||
|
||||
typedef Pool<BaseStation, StationID, 32, 64000> StationPool;
|
||||
extern StationPool _station_pool;
|
||||
|
||||
static const byte INITIAL_STATION_RATING = 175;
|
||||
|
||||
static const uint MAX_EXTRA_STATION_NAMES = 1024;
|
||||
|
@@ -46,7 +46,11 @@ void CDECL strgen_warning(const char *s, ...)
|
||||
va_start(va, s);
|
||||
vseprintf(buf, lastof(buf), s, va);
|
||||
va_end(va);
|
||||
if (_show_todo > 0) {
|
||||
fprintf(stderr, LINE_NUM_FMT("warning"), _file, _cur_line, buf);
|
||||
} else {
|
||||
fprintf(stderr, LINE_NUM_FMT("info"), _file, _cur_line, buf);
|
||||
}
|
||||
_warnings++;
|
||||
}
|
||||
|
||||
|
@@ -818,9 +818,13 @@ void StringReader::ParseFile()
|
||||
char buf[2048];
|
||||
_warnings = _errors = 0;
|
||||
|
||||
_translation = this->master || this->translation;
|
||||
_translation = this->translation;
|
||||
_file = this->file;
|
||||
|
||||
/* Abusing _show_todo to replace "warning" with "info" for translations. */
|
||||
_show_todo &= 3;
|
||||
if (!this->translation) _show_todo |= 4;
|
||||
|
||||
/* For each new file we parse, reset the genders, and language codes. */
|
||||
MemSetT(&_lang, 0);
|
||||
strecpy(_lang.digit_group_separator, ",", lastof(_lang.digit_group_separator));
|
||||
|
@@ -43,22 +43,19 @@ void Subsidy::AwardTo(CompanyID company)
|
||||
this->awarded = company;
|
||||
this->remaining = _settings_game.difficulty.subsidy_duration * MONTHS_IN_YEAR;
|
||||
|
||||
char company_name[MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH];
|
||||
SetDParam(0, company);
|
||||
GetString(company_name, STR_COMPANY_NAME, lastof(company_name));
|
||||
|
||||
char *cn = stredup(company_name);
|
||||
NewsStringData *company_name = new NewsStringData(GetString(STR_COMPANY_NAME));
|
||||
|
||||
/* Add a news item */
|
||||
std::pair<NewsReferenceType, NewsReferenceType> reftype = SetupSubsidyDecodeParam(this, SubsidyDecodeParamType::NewsAwarded);
|
||||
InjectDParam(1);
|
||||
|
||||
SetDParamStr(0, cn);
|
||||
SetDParamStr(0, company_name->string);
|
||||
AddNewsItem(
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF + _settings_game.difficulty.subsidy_multiplier,
|
||||
NT_SUBSIDIES, NF_NORMAL,
|
||||
reftype.first, this->src, reftype.second, this->dst,
|
||||
cn
|
||||
company_name
|
||||
);
|
||||
AI::BroadcastNewEvent(new ScriptEventSubsidyAwarded(this->index));
|
||||
Game::NewEvent(new ScriptEventSubsidyAwarded(this->index));
|
||||
|
@@ -8,7 +8,7 @@
|
||||
; company changes them, it changes for all players.
|
||||
|
||||
[pre-amble]
|
||||
static void UpdateServiceInterval(int32 new_value);
|
||||
static void UpdateAllServiceInterval(int32 new_value);
|
||||
static bool CanUpdateServiceInterval(VehicleType type, int32 &new_value);
|
||||
static void UpdateServiceInterval(VehicleType type, int32 new_value);
|
||||
|
||||
@@ -85,7 +85,7 @@ var = vehicle.servint_ispercent
|
||||
def = false
|
||||
str = STR_CONFIG_SETTING_SERVINT_ISPERCENT
|
||||
strhelp = STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT
|
||||
post_cb = UpdateServiceInterval
|
||||
post_cb = UpdateAllServiceInterval
|
||||
|
||||
[SDT_VAR]
|
||||
var = vehicle.servint_trains
|
||||
|
@@ -4091,6 +4091,20 @@ strval = STR_CONFIG_SETTING_AUTOSCROLL_DISABLED
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_VAR]
|
||||
ifdef = __EMSCRIPTEN__
|
||||
var = gui.scroll_mode
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
|
||||
def = 2
|
||||
min = 0
|
||||
max = 3
|
||||
str = STR_CONFIG_SETTING_SCROLLMODE
|
||||
strhelp = STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT
|
||||
strval = STR_CONFIG_SETTING_SCROLLMODE_DEFAULT
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_VAR]
|
||||
ifndef = __EMSCRIPTEN__
|
||||
var = gui.scroll_mode
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
|
||||
|
@@ -2274,15 +2274,13 @@ CommandCost CmdFoundTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||
SetDParam(0, t->index);
|
||||
AddTileNewsItem(STR_NEWS_NEW_TOWN_UNSPONSORED, NT_INDUSTRY_OPEN, tile);
|
||||
} else {
|
||||
char company_name[MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH];
|
||||
SetDParam(0, _current_company);
|
||||
GetString(company_name, STR_COMPANY_NAME, lastof(company_name));
|
||||
NewsStringData *company_name = new NewsStringData(GetString(STR_COMPANY_NAME));
|
||||
|
||||
char *cn = stredup(company_name);
|
||||
SetDParamStr(0, cn);
|
||||
SetDParamStr(0, company_name->string);
|
||||
SetDParam(1, t->index);
|
||||
|
||||
AddTileNewsItem(STR_NEWS_NEW_TOWN, NT_INDUSTRY_OPEN, tile, cn);
|
||||
AddTileNewsItem(STR_NEWS_NEW_TOWN, NT_INDUSTRY_OPEN, tile, company_name);
|
||||
}
|
||||
AI::BroadcastNewEvent(new ScriptEventTownFounded(t->index));
|
||||
Game::NewEvent(new ScriptEventTownFounded(t->index));
|
||||
@@ -3452,15 +3450,13 @@ static CommandCost TownActionRoadRebuild(Town *t, DoCommandFlag flags)
|
||||
if (flags & DC_EXEC) {
|
||||
t->road_build_months = 6;
|
||||
|
||||
char company_name[MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH];
|
||||
SetDParam(0, _current_company);
|
||||
GetString(company_name, STR_COMPANY_NAME, lastof(company_name));
|
||||
NewsStringData *company_name = new NewsStringData(GetString(STR_COMPANY_NAME));
|
||||
|
||||
char *cn = stredup(company_name);
|
||||
SetDParam(0, t->index);
|
||||
SetDParamStr(1, cn);
|
||||
SetDParamStr(1, company_name->string);
|
||||
|
||||
AddNewsItem(STR_NEWS_ROAD_REBUILDING, NT_GENERAL, NF_NORMAL, NR_TOWN, t->index, NR_NONE, UINT32_MAX, cn);
|
||||
AddNewsItem(STR_NEWS_ROAD_REBUILDING, NT_GENERAL, NF_NORMAL, NR_TOWN, t->index, NR_NONE, UINT32_MAX, company_name);
|
||||
AI::BroadcastNewEvent(new ScriptEventRoadReconstruction((ScriptCompany::CompanyID)(Owner)_current_company, t->index));
|
||||
Game::NewEvent(new ScriptEventRoadReconstruction((ScriptCompany::CompanyID)(Owner)_current_company, t->index));
|
||||
}
|
||||
@@ -3597,8 +3593,7 @@ static CommandCost TownActionBuyRights(Town *t, DoCommandFlag flags)
|
||||
SetWindowClassesDirty(WC_STATION_VIEW);
|
||||
|
||||
/* Spawn news message */
|
||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
||||
cni->FillData(Company::Get(_current_company));
|
||||
CompanyNewsInformation *cni = new CompanyNewsInformation(Company::Get(_current_company));
|
||||
SetDParam(0, STR_NEWS_EXCLUSIVE_RIGHTS_TITLE);
|
||||
SetDParam(1, STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION);
|
||||
SetDParam(2, t->index);
|
||||
|
@@ -12,6 +12,8 @@
|
||||
#include "../../stdafx.h"
|
||||
#include "../../os/macosx/macos.h"
|
||||
|
||||
#define GL_SILENCE_DEPRECATION
|
||||
|
||||
#define Rect OTTDRect
|
||||
#define Point OTTDPoint
|
||||
#import <Cocoa/Cocoa.h>
|
||||
@@ -150,7 +152,6 @@ static bool _allowSoftware;
|
||||
{
|
||||
if (self = [ super initWithFrame:frameRect ]) {
|
||||
/* We manage our content updates ourselves. */
|
||||
self.wantsBestResolutionOpenGLSurface = _allow_hidpi_window ? YES : NO;
|
||||
self.layerContentsRedrawPolicy = NSViewLayerContentsRedrawOnSetNeedsDisplay;
|
||||
|
||||
/* Create backing layer. */
|
||||
|
@@ -45,6 +45,17 @@
|
||||
#import <sys/time.h> /* gettimeofday */
|
||||
#include <array>
|
||||
|
||||
/* The 10.12 SDK added new names for some enum constants and
|
||||
* deprecated the old ones. As there's no functional change in any
|
||||
* way, just use a define for older SDKs to the old names. */
|
||||
#ifndef HAVE_OSX_1012_SDK
|
||||
# define NSEventModifierFlagCommand NSCommandKeyMask
|
||||
# define NSEventModifierFlagControl NSControlKeyMask
|
||||
# define NSEventModifierFlagOption NSAlternateKeyMask
|
||||
# define NSEventModifierFlagShift NSShiftKeyMask
|
||||
# define NSEventModifierFlagCapsLock NSAlphaShiftKeyMask
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Important notice regarding all modifications!!!!!!!
|
||||
* There are certain limitations because the file is objective C++.
|
||||
@@ -360,7 +371,11 @@ bool VideoDriver_Cocoa::MakeWindow(int width, int height)
|
||||
NSRect contentRect = NSMakeRect(0, 0, width, height);
|
||||
|
||||
/* Create main window. */
|
||||
#ifdef HAVE_OSX_1012_SDK
|
||||
unsigned int style = NSWindowStyleMaskTitled | NSWindowStyleMaskResizable | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskClosable;
|
||||
#else
|
||||
unsigned int style = NSTitledWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask | NSClosableWindowMask;
|
||||
#endif
|
||||
this->window = [ [ OTTD_CocoaWindow alloc ] initWithContentRect:contentRect styleMask:style backing:NSBackingStoreBuffered defer:NO driver:this ];
|
||||
if (this->window == nil) {
|
||||
DEBUG(driver, 0, "Could not create the Cocoa window.");
|
||||
@@ -376,7 +391,7 @@ bool VideoDriver_Cocoa::MakeWindow(int width, int height)
|
||||
behavior |= NSWindowCollectionBehaviorFullScreenPrimary;
|
||||
[ this->window setCollectionBehavior:behavior ];
|
||||
|
||||
NSButton* fullscreenButton = [ this->window standardWindowButton:NSWindowFullScreenButton ];
|
||||
NSButton* fullscreenButton = [ this->window standardWindowButton:NSWindowZoomButton ];
|
||||
[ fullscreenButton setAction:@selector(toggleFullScreen:) ];
|
||||
[ fullscreenButton setTarget:this->window ];
|
||||
}
|
||||
@@ -430,7 +445,12 @@ bool VideoDriver_Cocoa::MakeWindow(int width, int height)
|
||||
*/
|
||||
bool VideoDriver_Cocoa::PollEvent()
|
||||
{
|
||||
NSEvent *event = [ NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[ NSDate distantPast ] inMode:NSDefaultRunLoopMode dequeue:YES ];
|
||||
#ifdef HAVE_OSX_1012_SDK
|
||||
NSEventMask mask = NSEventMaskAny;
|
||||
#else
|
||||
NSEventMask mask = NSAnyEventMask;
|
||||
#endif
|
||||
NSEvent *event = [ NSApp nextEventMatchingMask:mask untilDate:[ NSDate distantPast ] inMode:NSDefaultRunLoopMode dequeue:YES ];
|
||||
|
||||
if (event == nil) return false;
|
||||
|
||||
@@ -446,8 +466,8 @@ void VideoDriver_Cocoa::InputLoop()
|
||||
bool old_ctrl_pressed = _ctrl_pressed;
|
||||
bool old_shift_pressed = _shift_pressed;
|
||||
|
||||
_ctrl_pressed = ((cur_mods & ( _settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? NSControlKeyMask : NSCommandKeyMask)) != 0) != _invert_ctrl;
|
||||
_shift_pressed = ((cur_mods & NSShiftKeyMask) != 0) != _invert_shift;
|
||||
_ctrl_pressed = ((cur_mods & ( _settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? NSEventModifierFlagControl : NSEventModifierFlagCommand)) != 0) != _invert_ctrl;
|
||||
_shift_pressed = ((cur_mods & NSEventModifierFlagShift) != 0) != _invert_shift;
|
||||
|
||||
#if defined(_DEBUG)
|
||||
this->fast_forward_key_pressed = _shift_pressed;
|
||||
|
@@ -32,7 +32,6 @@ extern NSString *OTTDMainLaunchGameEngine;
|
||||
@interface OTTD_CocoaWindow : NSWindow
|
||||
- (instancetype)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag driver:(VideoDriver_Cocoa *)drv;
|
||||
|
||||
- (void)display;
|
||||
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag;
|
||||
@end
|
||||
|
||||
|
@@ -37,6 +37,16 @@
|
||||
/* Table data for key mapping. */
|
||||
#include "cocoa_keys.h"
|
||||
|
||||
/* The 10.12 SDK added new names for some enum constants and
|
||||
* deprecated the old ones. As there's no functional change in any
|
||||
* way, just use a define for older SDKs to the old names. */
|
||||
#ifndef HAVE_OSX_1012_SDK
|
||||
# define NSEventModifierFlagCommand NSCommandKeyMask
|
||||
# define NSEventModifierFlagControl NSControlKeyMask
|
||||
# define NSEventModifierFlagOption NSAlternateKeyMask
|
||||
# define NSEventModifierFlagShift NSShiftKeyMask
|
||||
# define NSEventModifierFlagCapsLock NSAlphaShiftKeyMask
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Important notice regarding all modifications!!!!!!!
|
||||
@@ -135,7 +145,12 @@ static std::vector<WChar> NSStringToUTF32(NSString *s)
|
||||
[ NSApp stop:self ];
|
||||
|
||||
/* Send an empty event to return from the run loop. Without that, application is stuck waiting for an event. */
|
||||
NSEvent *event = [ NSEvent otherEventWithType:NSApplicationDefined location:NSMakePoint(0, 0) modifierFlags:0 timestamp:0.0 windowNumber:0 context:nil subtype:0 data1:0 data2:0 ];
|
||||
#ifdef HAVE_OSX_1012_SDK
|
||||
NSEventType type = NSEventTypeApplicationDefined;
|
||||
#else
|
||||
NSEventType type = NSApplicationDefined;
|
||||
#endif
|
||||
NSEvent *event = [ NSEvent otherEventWithType:type location:NSMakePoint(0, 0) modifierFlags:0 timestamp:0.0 windowNumber:0 context:nil subtype:0 data1:0 data2:0 ];
|
||||
[ NSApp postEvent:event atStart:YES ];
|
||||
}
|
||||
|
||||
@@ -207,7 +222,7 @@ static void setApplicationMenu()
|
||||
[ appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h" ];
|
||||
|
||||
NSMenuItem *menuItem = [ appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h" ];
|
||||
[ menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask | NSCommandKeyMask) ];
|
||||
[ menuItem setKeyEquivalentModifierMask:(NSEventModifierFlagOption | NSEventModifierFlagCommand) ];
|
||||
|
||||
[ appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@"" ];
|
||||
|
||||
@@ -329,7 +344,11 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||
|
||||
@autoreleasepool {
|
||||
NSAlert *alert = [ [ NSAlert alloc ] init ];
|
||||
#ifdef HAVE_OSX_1012_SDK
|
||||
[ alert setAlertStyle: NSAlertStyleCritical ];
|
||||
#else
|
||||
[ alert setAlertStyle: NSCriticalAlertStyle ];
|
||||
#endif
|
||||
[ alert setMessageText:[ NSString stringWithUTF8String:title ] ];
|
||||
[ alert setInformativeText:[ NSString stringWithUTF8String:message ] ];
|
||||
[ alert addButtonWithTitle: [ NSString stringWithUTF8String:buttonLabel ] ];
|
||||
@@ -386,23 +405,6 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||
return self;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method fires just before the window deminaturizes from the Dock.
|
||||
* We'll save the current visible surface, let the window manager redraw any
|
||||
* UI elements, and restore the surface. This way, no expose event
|
||||
* is required, and the deminiaturize works perfectly.
|
||||
*/
|
||||
- (void)display
|
||||
{
|
||||
/* save current visible surface */
|
||||
[ self cacheImageInRect:[ driver->cocoaview frame ] ];
|
||||
|
||||
/* let the window manager redraw controls, border, etc */
|
||||
[ super display ];
|
||||
|
||||
/* restore visible surface */
|
||||
[ self restoreCachedImage ];
|
||||
}
|
||||
/**
|
||||
* Define the rectangle we draw our window in
|
||||
*/
|
||||
@@ -536,8 +538,8 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||
- (BOOL)emulateRightButton:(NSEvent *)event
|
||||
{
|
||||
uint32 keymask = 0;
|
||||
if (_settings_client.gui.right_mouse_btn_emulation == RMBE_COMMAND) keymask |= NSCommandKeyMask;
|
||||
if (_settings_client.gui.right_mouse_btn_emulation == RMBE_CONTROL) keymask |= NSControlKeyMask;
|
||||
if (_settings_client.gui.right_mouse_btn_emulation == RMBE_COMMAND) keymask |= NSEventModifierFlagCommand;
|
||||
if (_settings_client.gui.right_mouse_btn_emulation == RMBE_CONTROL) keymask |= NSEventModifierFlagControl;
|
||||
|
||||
return (event.modifierFlags & keymask) != 0;
|
||||
}
|
||||
@@ -653,18 +655,18 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||
|
||||
case QZ_RETURN:
|
||||
case QZ_f:
|
||||
if (down && (modifiers & NSCommandKeyMask)) {
|
||||
if (down && (modifiers & NSEventModifierFlagCommand)) {
|
||||
VideoDriver::GetInstance()->ToggleFullscreen(!_fullscreen);
|
||||
}
|
||||
break;
|
||||
|
||||
case QZ_v:
|
||||
if (down && EditBoxInGlobalFocus() && (modifiers & (NSCommandKeyMask | NSControlKeyMask))) {
|
||||
if (down && EditBoxInGlobalFocus() && (modifiers & (NSEventModifierFlagCommand | NSEventModifierFlagControl))) {
|
||||
HandleKeypress(WKC_CTRL | 'V', unicode);
|
||||
}
|
||||
break;
|
||||
case QZ_u:
|
||||
if (down && EditBoxInGlobalFocus() && (modifiers & (NSCommandKeyMask | NSControlKeyMask))) {
|
||||
if (down && EditBoxInGlobalFocus() && (modifiers & (NSEventModifierFlagCommand | NSEventModifierFlagControl))) {
|
||||
HandleKeypress(WKC_CTRL | 'U', unicode);
|
||||
}
|
||||
break;
|
||||
@@ -676,10 +678,10 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||
auto vk = std::find_if(std::begin(_vk_mapping), std::end(_vk_mapping), [=](const CocoaVkMapping &m) { return m.vk_from == keycode; });
|
||||
uint32 pressed_key = vk != std::end(_vk_mapping) ? vk->map_to : 0;
|
||||
|
||||
if (modifiers & NSShiftKeyMask) pressed_key |= WKC_SHIFT;
|
||||
if (modifiers & NSControlKeyMask) pressed_key |= (_settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_CTRL : WKC_META);
|
||||
if (modifiers & NSAlternateKeyMask) pressed_key |= WKC_ALT;
|
||||
if (modifiers & NSCommandKeyMask) pressed_key |= (_settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_META : WKC_CTRL);
|
||||
if (modifiers & NSEventModifierFlagShift) pressed_key |= WKC_SHIFT;
|
||||
if (modifiers & NSEventModifierFlagControl) pressed_key |= (_settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_CTRL : WKC_META);
|
||||
if (modifiers & NSEventModifierFlagOption) pressed_key |= WKC_ALT;
|
||||
if (modifiers & NSEventModifierFlagCommand) pressed_key |= (_settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_META : WKC_CTRL);
|
||||
|
||||
static bool console = false;
|
||||
|
||||
@@ -715,7 +717,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||
case QZ_q:
|
||||
case QZ_h:
|
||||
case QZ_m:
|
||||
if (event.modifierFlags & NSCommandKeyMask) {
|
||||
if (event.modifierFlags & NSEventModifierFlagCommand) {
|
||||
[ self interpretKeyEvents:[ NSArray arrayWithObject:event ] ];
|
||||
}
|
||||
break;
|
||||
@@ -744,7 +746,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||
case QZ_q:
|
||||
case QZ_h:
|
||||
case QZ_m:
|
||||
if (event.modifierFlags & NSCommandKeyMask) {
|
||||
if (event.modifierFlags & NSEventModifierFlagCommand) {
|
||||
[ self interpretKeyEvents:[ NSArray arrayWithObject:event ] ];
|
||||
}
|
||||
break;
|
||||
@@ -765,7 +767,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||
if (self->_current_mods == newMods) return;
|
||||
|
||||
/* Iterate through the bits, testing each against the current modifiers */
|
||||
for (unsigned int i = 0, bit = NSAlphaShiftKeyMask; bit <= NSCommandKeyMask; bit <<= 1, ++i) {
|
||||
for (unsigned int i = 0, bit = NSEventModifierFlagCapsLock; bit <= NSEventModifierFlagCommand; bit <<= 1, ++i) {
|
||||
unsigned int currentMask, newMask;
|
||||
|
||||
currentMask = self->_current_mods & bit;
|
||||
|
@@ -22,6 +22,7 @@
|
||||
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
#if defined(__APPLE__)
|
||||
# define GL_SILENCE_DEPRECATION
|
||||
# include <OpenGL/gl3.h>
|
||||
#else
|
||||
# include <GL/gl.h>
|
||||
@@ -146,7 +147,7 @@ GetOGLProcAddressProc GetOGLProcAddress;
|
||||
*/
|
||||
const char *FindStringInExtensionList(const char *string, const char *substring)
|
||||
{
|
||||
while (1) {
|
||||
while (true) {
|
||||
/* Is the extension string present at all? */
|
||||
const char *pos = strstr(string, substring);
|
||||
if (pos == nullptr) break;
|
||||
@@ -1309,7 +1310,7 @@ void OpenGLBackend::RenderOglSprite(OpenGLSprite *gl_sprite, PaletteID pal, int
|
||||
_glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
|
||||
|
||||
_glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, 256, GetNonSprite(GB(pal, 0, PALETTE_WIDTH), ST_RECOLOUR) + 1);
|
||||
_glTexSubImage1D(GL_TEXTURE_1D, 0, 0, 256, GL_RED, GL_UNSIGNED_BYTE, 0);
|
||||
_glTexSubImage1D(GL_TEXTURE_1D, 0, 0, 256, GL_RED, GL_UNSIGNED_BYTE, nullptr);
|
||||
|
||||
_glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||
|
||||
|
@@ -41,11 +41,6 @@
|
||||
|
||||
#include "../safeguards.h"
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
/** Whether we just had a window-enter event. */
|
||||
static bool _cursor_new_in_window = false;
|
||||
#endif
|
||||
|
||||
static std::string _editing_text;
|
||||
|
||||
static void SetTextInputRect();
|
||||
@@ -424,9 +419,9 @@ bool VideoDriver_SDL_Base::CreateMainSurface(uint w, uint h, bool resize)
|
||||
|
||||
bool VideoDriver_SDL_Base::ClaimMousePointer()
|
||||
{
|
||||
/* Emscripten never claims the pointer, so we do not need to change the cursor visibility. */
|
||||
#ifndef __EMSCRIPTEN__
|
||||
SDL_ShowCursor(0);
|
||||
#ifdef __EMSCRIPTEN__
|
||||
SDL_SetRelativeMouseMode(SDL_TRUE);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
@@ -659,27 +654,9 @@ bool VideoDriver_SDL_Base::PollEvent()
|
||||
|
||||
switch (ev.type) {
|
||||
case SDL_MOUSEMOTION:
|
||||
#ifdef __EMSCRIPTEN__
|
||||
if (_cursor_new_in_window) {
|
||||
/* The cursor just moved into the window; this means we don't
|
||||
* know the absolutely position yet to move relative from.
|
||||
* Before this time, SDL didn't know it either, and this is
|
||||
* why we postpone it till now. Update the absolute position
|
||||
* for this once, and work relative after. */
|
||||
_cursor.pos.x = ev.motion.x;
|
||||
_cursor.pos.y = ev.motion.y;
|
||||
_cursor.dirty = true;
|
||||
|
||||
_cursor_new_in_window = false;
|
||||
SDL_SetRelativeMouseMode(SDL_TRUE);
|
||||
} else {
|
||||
_cursor.UpdateCursorPositionRelative(ev.motion.xrel, ev.motion.yrel);
|
||||
}
|
||||
#else
|
||||
if (_cursor.UpdateCursorPosition(ev.motion.x, ev.motion.y, true)) {
|
||||
SDL_WarpMouseInWindow(this->sdl_window, _cursor.pos.x, _cursor.pos.y);
|
||||
}
|
||||
#endif
|
||||
HandleMouseEvents();
|
||||
break;
|
||||
|
||||
@@ -814,9 +791,7 @@ bool VideoDriver_SDL_Base::PollEvent()
|
||||
// mouse entered the window, enable cursor
|
||||
_cursor.in_window = true;
|
||||
#ifdef __EMSCRIPTEN__
|
||||
/* Disable relative mouse mode for the first mouse motion,
|
||||
* so we can pick up the absolutely position again. */
|
||||
_cursor_new_in_window = true;
|
||||
/* Ensure pointer lock will not occur. */
|
||||
SDL_SetRelativeMouseMode(SDL_FALSE);
|
||||
#endif
|
||||
} else if (ev.window.event == SDL_WINDOWEVENT_LEAVE) {
|
||||
@@ -857,7 +832,9 @@ static const char *InitializeSDL()
|
||||
* UpdateWindowSurface() to update the window's texture instead of
|
||||
* its surface. */
|
||||
SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION, "0");
|
||||
#ifndef __EMSCRIPTEN__
|
||||
SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, "1");
|
||||
#endif
|
||||
|
||||
/* Check if the video-driver is already initialized. */
|
||||
if (SDL_WasInit(SDL_INIT_VIDEO) != 0) return nullptr;
|
||||
@@ -926,7 +903,7 @@ void VideoDriver_SDL_Base::Stop()
|
||||
void VideoDriver_SDL_Base::InputLoop()
|
||||
{
|
||||
uint32 mod = SDL_GetModState();
|
||||
const Uint8 *keys = SDL_GetKeyboardState(NULL);
|
||||
const Uint8 *keys = SDL_GetKeyboardState(nullptr);
|
||||
|
||||
bool old_ctrl_pressed = _ctrl_pressed;
|
||||
bool old_shift_pressed = _shift_pressed;
|
||||
|
@@ -106,6 +106,7 @@ enum ClientListWidgets {
|
||||
WID_CL_MATRIX, ///< Company/client list.
|
||||
WID_CL_SCROLLBAR, ///< Scrollbar for company/client list.
|
||||
WID_CL_COMPANY_JOIN, ///< Used for QueryWindow when a company has a password.
|
||||
WID_CL_CLIENT_COMPANY_COUNT, ///< Count of clients and companies.
|
||||
};
|
||||
|
||||
/** Widgets of the #NetworkJoinStatusWindow class. */
|
||||
|
Reference in New Issue
Block a user