Merge branch 'master' into jgrpp

# Conflicts:
#	cmake/CompileFlags.cmake
#	src/3rdparty/squirrel/squirrel/sqclosure.h
#	src/3rdparty/squirrel/squirrel/sqobject.h
#	src/3rdparty/squirrel/squirrel/sqvm.h
#	src/aircraft.h
#	src/airport_gui.cpp
#	src/blitter/32bpp_sse_func.hpp
#	src/blitter/null.hpp
#	src/bridge_gui.cpp
#	src/build_vehicle_gui.cpp
#	src/cargotype.h
#	src/cheat_gui.cpp
#	src/command.cpp
#	src/command_func.h
#	src/company_gui.cpp
#	src/console_gui.cpp
#	src/date_gui.cpp
#	src/depot_gui.cpp
#	src/dock_gui.cpp
#	src/economy.cpp
#	src/error_gui.cpp
#	src/fileio.cpp
#	src/fios.cpp
#	src/fios_gui.cpp
#	src/fontcache/spritefontcache.h
#	src/framerate_gui.cpp
#	src/game/game_text.cpp
#	src/gamelog.cpp
#	src/genworld_gui.cpp
#	src/gfx_layout_fallback.cpp
#	src/group_gui.cpp
#	src/highscore_gui.cpp
#	src/hotkeys.cpp
#	src/industry_cmd.cpp
#	src/industry_gui.cpp
#	src/landscape.cpp
#	src/main_gui.cpp
#	src/misc_cmd.cpp
#	src/misc_gui.cpp
#	src/network/core/tcp_game.cpp
#	src/network/core/udp.cpp
#	src/network/network_chat_gui.cpp
#	src/network/network_content_gui.cpp
#	src/network/network_gui.cpp
#	src/network/network_server.cpp
#	src/network/network_server.h
#	src/newgrf_airport.cpp
#	src/newgrf_airport.h
#	src/newgrf_airporttiles.cpp
#	src/newgrf_airporttiles.h
#	src/newgrf_animation_base.h
#	src/newgrf_canal.cpp
#	src/newgrf_commons.h
#	src/newgrf_config.cpp
#	src/newgrf_debug_gui.cpp
#	src/newgrf_engine.cpp
#	src/newgrf_engine.h
#	src/newgrf_generic.cpp
#	src/newgrf_gui.cpp
#	src/newgrf_house.cpp
#	src/newgrf_house.h
#	src/newgrf_industries.cpp
#	src/newgrf_industries.h
#	src/newgrf_industrytiles.cpp
#	src/newgrf_industrytiles.h
#	src/newgrf_object.cpp
#	src/newgrf_object.h
#	src/newgrf_railtype.cpp
#	src/newgrf_railtype.h
#	src/newgrf_roadstop.cpp
#	src/newgrf_roadstop.h
#	src/newgrf_roadtype.cpp
#	src/newgrf_roadtype.h
#	src/newgrf_spritegroup.cpp
#	src/newgrf_spritegroup.h
#	src/newgrf_station.cpp
#	src/newgrf_station.h
#	src/newgrf_town.cpp
#	src/newgrf_town.h
#	src/news_gui.cpp
#	src/object_gui.cpp
#	src/order_gui.cpp
#	src/os/macosx/crashlog_osx.cpp
#	src/os/unix/crashlog_unix.cpp
#	src/os/windows/crashlog_win.cpp
#	src/os/windows/win32.cpp
#	src/os/windows/win32_main.cpp
#	src/pathfinder/npf/npf.cpp
#	src/pathfinder/npf/queue.cpp
#	src/rail_cmd.cpp
#	src/rail_gui.cpp
#	src/road_gui.cpp
#	src/roadveh.h
#	src/saveload/saveload.cpp
#	src/screenshot.cpp
#	src/script/api/script_text.hpp
#	src/settings.cpp
#	src/settings_gui.cpp
#	src/settings_internal.h
#	src/settings_table.cpp
#	src/signs_cmd.cpp
#	src/signs_gui.cpp
#	src/smallmap_gui.cpp
#	src/smallmap_gui.h
#	src/spriteloader/grf.hpp
#	src/station_cmd.cpp
#	src/station_gui.cpp
#	src/station_map.h
#	src/statusbar_gui.cpp
#	src/stdafx.h
#	src/strgen/strgen.cpp
#	src/table/newgrf_debug_data.h
#	src/terraform_gui.cpp
#	src/timer/timer_game_calendar.cpp
#	src/timer/timer_window.cpp
#	src/town.h
#	src/town_cmd.cpp
#	src/town_gui.cpp
#	src/train_gui.cpp
#	src/transparency_gui.cpp
#	src/vehicle_gui.cpp
#	src/water_cmd.cpp
#	src/waypoint_cmd.cpp
#	src/widget.cpp
#	src/widget_type.h
#	src/widgets/dropdown.cpp
#	src/widgets/rail_widget.h
#	src/widgets/terraform_widget.h
#	src/window.cpp
#	src/window_gui.h
pull/615/head
Jonathan G Rennison 5 months ago
commit 0d4d4a9cac

@ -86,10 +86,15 @@ jobs:
fail-fast: false
matrix:
include:
- name: Clang
- name: Clang - Debug
compiler: clang
cxxcompiler: clang++
libraries: libsdl2-dev
- name: Clang - Release
compiler: clang
cxxcompiler: clang++
libraries: libsdl2-dev
extra-cmake-parameters: -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOPTION_USE_ASSERTS=OFF
- name: GCC - SDL2
compiler: gcc
cxxcompiler: g++

@ -54,7 +54,6 @@ jobs:
liblzma-dev \
liblzo2-dev \
libsdl2-dev \
nlohmann-json3-dev \
zlib1g-dev \
# EOF
echo "::endgroup::"

@ -573,6 +573,12 @@ See the comments in the source files in `src/3rdparty/md5` for the complete lice
The fmt implementation in `src/3rdparty/fmt` is licensed under the MIT license.
See `src/3rdparty/fmt/LICENSE.rst` for the complete license text.
The nlohmann json implementation in `src/3rdparty/nlohmann` is licensed under the MIT license.
See `src/3rdparty/nlohmann/LICENSE.MIT` for the complete license text.
The OpenGL API in `src/3rdparty/opengl` is licensed under the MIT license.
See `src/3rdparty/opengl/khrplatform.h` for the complete license text.
The catch2 implementation in `src/3rdparty/catch2` is licensed under the Boost Software License, Version 1.0.
See `src/3rdparty/catch2/LICENSE.txt` for the complete license text.

@ -41,7 +41,11 @@ macro(compile_flags)
#set(IS_STABLE_RELEASE "$<AND:$<NOT:$<CONFIG:Debug>>,$<NOT:$<BOOL:${OPTION_USE_ASSERTS}>>>")
if(MSVC)
add_compile_options(/W3)
add_compile_options(
/W3
#/w34100 # 'identifier' : unreferenced formal parameter
/w34189 # 'identifier' : local variable is initialized but not referenced
)
if(MSVC_VERSION GREATER 1929 AND MSVC_VERSION LESS 1937 AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
# Starting with version 19.30 (fixed in version 19.37), there is an optimisation bug, see #9966 for details
# This flag disables the broken optimisation to work around the bug
@ -62,6 +66,7 @@ macro(compile_flags)
-Wformat=2
-Winit-self
"$<$<COMPILE_LANGUAGE:CXX>:-Wnon-virtual-dtor>"
"$<$<COMPILE_LANGUAGE:CXX>:-Wsuggest-override>"
# Often parameters are unused, which is fine.
-Wno-unused-parameter
@ -89,22 +94,6 @@ macro(compile_flags)
endif()
endif(NOT CMAKE_BUILD_TYPE)
# When we are a stable release (Release build + USE_ASSERTS not set),
# assertations are off, which trigger a lot of warnings. We disable
# these warnings for these releases.
#if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# add_compile_options(
# "$<${IS_STABLE_RELEASE}:-Wno-unused-variable>"
# "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-parameter>"
# "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-variable>"
# )
#else (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# add_compile_options(
# "$<${IS_STABLE_RELEASE}:-Wno-unused-variable>"
# "$<${IS_STABLE_RELEASE}:-Wno-unused-parameter>"
# )
#endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# Ninja processes the output so the output from the compiler
# isn't directly to a terminal; hence, the default is
# non-coloured output. We can override this to get nicely

@ -1,7 +1,6 @@
/* see copyright notice in squirrel.h */
#include <squirrel.h>
#include <sqstdstring.h>
#include <stdarg.h>
#define scstrchr strchr
#define scatoi atoi

@ -12,7 +12,6 @@
#include "sqfuncproto.h"
#include "sqclosure.h"
#include "sqclass.h"
#include <stdarg.h>
#include <ctype.h>
#include "../../../safeguards.h"
@ -559,7 +558,7 @@ bool _hsort_sift_down(HSQUIRRELVM v,SQArray *arr, SQInteger root, SQInteger bott
return true;
}
bool _hsort(HSQUIRRELVM v,SQObjectPtr &arr, SQInteger l, SQInteger r,SQInteger func)
bool _hsort(HSQUIRRELVM v,SQObjectPtr &arr, SQInteger, SQInteger,SQInteger func)
{
SQArray *a = _array(arr);
SQInteger i;

@ -185,7 +185,7 @@ SQInstance::~SQInstance()
if(_class){ Finalize(); } //if _class is null it was already finalized by the GC
}
bool SQInstance::GetMetaMethod(SQVM *v,SQMetaMethod mm,SQObjectPtr &res)
bool SQInstance::GetMetaMethod(SQVM *,SQMetaMethod mm,SQObjectPtr &res)
{
if(type(_class->_metamethods[mm]) != OT_NULL) {
res = _class->_metamethods[mm];

@ -54,13 +54,13 @@ public:
bool SetAttributes(const SQObjectPtr &key,const SQObjectPtr &val);
bool GetAttributes(const SQObjectPtr &key,SQObjectPtr &outval);
void Lock() { _locked = true; if(_base) _base->Lock(); }
void Release() {
void Release() override {
if (_hook) { _hook(_typetag,0);}
sq_delete_refcounted(this, SQClass);
}
void Finalize();
void Finalize() override;
#ifndef NO_GARBAGE_COLLECTOR
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override;
#endif
SQInteger Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);
SQInstance *CreateInstance();

@ -13,7 +13,7 @@ public:
SQClosure *nc = new (SQAllocationTag{}) SQClosure(ss,func);
return nc;
}
void Release(){
void Release() override {
sq_delete_refcounted(this,SQClosure);
}
SQClosure *Clone()
@ -31,8 +31,8 @@ public:
bool Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write);
static bool Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &ret);
#ifndef NO_GARBAGE_COLLECTOR
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
void Finalize(){_outervalues.resize(0); }
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override;
void Finalize() override {_outervalues.resize(0); }
#endif
SQObjectPtr _env;
SQObjectPtr _function;
@ -58,14 +58,14 @@ public:
_state=eDead;
_stack.resize(0);
_closure=_null_;}
void Release(){
void Release() override {
sq_delete_refcounted(this,SQGenerator);
}
bool Yield(SQVM *v);
bool Resume(SQVM *v,SQInteger target);
#ifndef NO_GARBAGE_COLLECTOR
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
void Finalize(){_stack.resize(0);_closure=_null_;}
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override;
void Finalize() override {_stack.resize(0);_closure=_null_;}
#endif
SQObjectPtr _closure;
SQObjectPtrVec _stack;
@ -99,12 +99,12 @@ public:
{
REMOVE_FROM_CHAIN(&_ss(this)->_gc_chain,this);
}
void Release(){
void Release() override {
sq_delete_refcounted(this,SQNativeClosure);
}
#ifndef NO_GARBAGE_COLLECTOR
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
void Finalize(){_outervalues.resize(0);}
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override;
void Finalize() override {_outervalues.resize(0);}
#endif
SQInteger _nparamscheck;
SQIntVec _typecheck;

@ -6,7 +6,6 @@
#include <squirrel.h>
#include "sqpcheader.h"
#include <stdarg.h>
#include "sqopcodes.h"
#include "sqstring.h"
#include "sqfuncproto.h"

@ -102,7 +102,7 @@ public:
SQFunctionProto *f = new (SQSizedAllocationTag(size)) SQFunctionProto(ninstructions, nliterals, nparameters, nfunctions, noutervalues, nlineinfos, nlocalvarinfos, ndefaultparams);
return f;
}
void Release(){
void Release() override {
_DESTRUCT_VECTOR(SQObjectPtr,_nliterals,_literals);
_DESTRUCT_VECTOR(SQObjectPtr,_nparameters,_parameters);
_DESTRUCT_VECTOR(SQObjectPtr,_nfunctions,_functions);

@ -113,7 +113,7 @@ struct SQRefCounted
struct SQWeakRef : SQRefCounted
{
void Release();
void Release() override;
SQObject _obj;
};
@ -391,7 +391,7 @@ struct SQCollectable : public SQRefCounted {
SQCollectable *_next;
SQCollectable *_prev;
SQSharedState *_sharedstate;
virtual void Release()=0;
void Release() override=0;
virtual void EnqueueMarkObjectForChildren(class SQGCMarkerQueue &queue)=0;
void UnMark();
virtual void Finalize()=0;

@ -274,7 +274,7 @@ void SQSharedState::EnqueueMarkObject(SQObjectPtr &o,SQGCMarkerQueue &queue)
}
SQInteger SQSharedState::CollectGarbage(SQVM *vm)
SQInteger SQSharedState::CollectGarbage(SQVM *)
{
SQInteger n=0;
SQVM *vms = _thread(_root_vm);

@ -19,7 +19,7 @@ public:
static SQString *Create(SQSharedState *ss, const SQChar *, SQInteger len = -1 );
static SQString *Create(SQSharedState *ss, const std::string &str) { return Create(ss, str.data(), str.size()); }
SQInteger Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);
void Release();
void Release() override;
SQSharedState *_sharedstate;
SQString *_next; //chain for the string table
SQInteger _len;

@ -17,10 +17,10 @@ struct SQUserData : SQDelegable
return ud;
}
#ifndef NO_GARBAGE_COLLECTOR
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
void Finalize(){SetDelegate(nullptr);}
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override;
void Finalize() override {SetDelegate(nullptr);}
#endif
void Release() {
void Release() override {
if (_hook) _hook(_val,_size);
sq_delete_refcounted(this, SQUserData);
}

@ -112,16 +112,16 @@ public:
#endif
#ifndef NO_GARBAGE_COLLECTOR
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override;
#endif
void Finalize();
void Finalize() override;
void GrowCallStack() {
SQInteger newsize = _alloccallsstacksize*2;
_callstackdata.resize(newsize);
_callsstack = &_callstackdata[0];
_alloccallsstacksize = newsize;
}
void Release(){ sq_delete_refcounted(this,SQVM); } //does nothing
void Release() override { sq_delete_refcounted(this,SQVM); } //does nothing
////////////////////////////////////////////////////////////////////////////
//stack functions for the api
void Remove(SQInteger n);

@ -118,7 +118,7 @@ struct AIConfigWindow : public Window {
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_AIC_DECREASE_NUMBER:
@ -180,7 +180,7 @@ struct AIConfigWindow : public Window {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
if (widget >= WID_AIC_TEXTFILE && widget < WID_AIC_TEXTFILE + TFT_CONTENT_END) {
if (this->selected_slot == INVALID_COMPANY || AIConfig::GetConfig(this->selected_slot) == nullptr) return;
@ -266,7 +266,7 @@ struct AIConfigWindow : public Window {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!IsEditable(this->selected_slot)) {
this->selected_slot = INVALID_COMPANY;

@ -91,30 +91,30 @@ struct Aircraft FINAL : public SpecializedVehicle<Aircraft, VEH_AIRCRAFT> {
/** We want to 'destruct' the right class. */
virtual ~Aircraft() { this->PreDestructor(); }
void MarkDirty();
void UpdateDeltaXY();
ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_AIRCRAFT_REVENUE : EXPENSES_AIRCRAFT_RUN; }
bool IsPrimaryVehicle() const { return this->IsNormalAircraft(); }
void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const;
void MarkDirty() override;
void UpdateDeltaXY() override;
ExpensesType GetExpenseType(bool income) const override { return income ? EXPENSES_AIRCRAFT_REVENUE : EXPENSES_AIRCRAFT_RUN; }
bool IsPrimaryVehicle() const override { return this->IsNormalAircraft(); }
void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const override;
Direction GetMapImageDirection() const { return this->First()->direction; }
int GetDisplaySpeed() const { return this->cur_speed; }
int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed; }
int GetSpeedOldUnits() const { return this->vcache.cached_max_speed * 10 / 128; }
int GetCurrentMaxSpeed() const { return this->GetSpeedOldUnits(); }
Money GetRunningCost() const;
int GetDisplaySpeed() const override { return this->cur_speed; }
int GetDisplayMaxSpeed() const override { return this->vcache.cached_max_speed; }
int GetSpeedOldUnits() const { return this->vcache.cached_max_speed * 10 / 128; }
int GetCurrentMaxSpeed() const override { return this->GetSpeedOldUnits(); }
Money GetRunningCost() const override;
bool IsInDepot() const
bool IsInDepot() const override
{
assert(this->IsPrimaryVehicle());
return (this->vehstatus & VS_HIDDEN) != 0 && IsHangarTile(this->tile);
}
bool Tick();
void OnNewDay();
void OnPeriodic();
uint Crash(bool flooded = false);
TileIndex GetOrderStationLocation(StationID station);
ClosestDepot FindClosestDepot();
bool Tick() override;
void OnNewDay() override;
void OnPeriodic() override;
uint Crash(bool flooded = false) override;
TileIndex GetOrderStationLocation(StationID station) override;
ClosestDepot FindClosestDepot() override;
/**
* Check if the aircraft type is a normal flying device; eg

@ -1379,7 +1379,7 @@ void HandleMissingAircraftOrders(Aircraft *v)
}
TileIndex Aircraft::GetOrderStationLocation(StationID station)
TileIndex Aircraft::GetOrderStationLocation(StationID)
{
/* Orders are changed in flight, ensure going to the right station. */
if (this->state == FLYING) {
@ -1713,31 +1713,31 @@ static void AircraftEventHandler_AtTerminal(Aircraft *v, const AirportFTAClass *
AirportMove(v, apc);
}
static void AircraftEventHandler_General(Aircraft *v, const AirportFTAClass *apc)
static void AircraftEventHandler_General(Aircraft *, const AirportFTAClass *)
{
error("OK, you shouldn't be here, check your Airport Scheme!");
}
static void AircraftEventHandler_TakeOff(Aircraft *v, const AirportFTAClass *apc)
static void AircraftEventHandler_TakeOff(Aircraft *v, const AirportFTAClass *)
{
PlayAircraftSound(v); // play takeoffsound for airplanes
v->state = STARTTAKEOFF;
}
static void AircraftEventHandler_StartTakeOff(Aircraft *v, const AirportFTAClass *apc)
static void AircraftEventHandler_StartTakeOff(Aircraft *v, const AirportFTAClass *)
{
v->state = ENDTAKEOFF;
v->UpdateDeltaXY();
}
static void AircraftEventHandler_EndTakeOff(Aircraft *v, const AirportFTAClass *apc)
static void AircraftEventHandler_EndTakeOff(Aircraft *v, const AirportFTAClass *)
{
v->state = FLYING;
/* get the next position to go to, differs per airport */
AircraftNextAirportPos_and_Order(v);
}
static void AircraftEventHandler_HeliTakeOff(Aircraft *v, const AirportFTAClass *apc)
static void AircraftEventHandler_HeliTakeOff(Aircraft *v, const AirportFTAClass *)
{
v->state = FLYING;
v->UpdateDeltaXY();
@ -1791,7 +1791,7 @@ static void AircraftEventHandler_Flying(Aircraft *v, const AirportFTAClass *apc)
v->pos = apc->layout[v->pos].next_position;
}
static void AircraftEventHandler_Landing(Aircraft *v, const AirportFTAClass *apc)
static void AircraftEventHandler_Landing(Aircraft *v, const AirportFTAClass *)
{
v->state = ENDLANDING;
AircraftLandAirplane(v); // maybe crash airplane
@ -1804,7 +1804,7 @@ static void AircraftEventHandler_Landing(Aircraft *v, const AirportFTAClass *apc
}
}
static void AircraftEventHandler_HeliLanding(Aircraft *v, const AirportFTAClass *apc)
static void AircraftEventHandler_HeliLanding(Aircraft *v, const AirportFTAClass *)
{
v->state = HELIENDLANDING;
v->UpdateDeltaXY();

@ -75,7 +75,7 @@ struct BuildAirToolbarWindow : Window {
this->InitNested(window_number);
this->OnInvalidateData();
if (_settings_client.gui.link_terraform_toolbar) ShowTerraformToolbar(this);
this->last_user_action = WIDGET_LIST_END;
this->last_user_action = INVALID_WID_AT;
}
void Close() override
@ -90,14 +90,12 @@ struct BuildAirToolbarWindow : Window {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
bool can_build = CanBuildVehicleInfrastructure(VEH_AIRCRAFT);
this->SetWidgetsDisabledState(!can_build,
WID_AT_AIRPORT,
WIDGET_LIST_END);
this->SetWidgetDisabledState(WID_AT_AIRPORT, !can_build);
if (!can_build) {
CloseWindowById(WC_BUILD_STATION, TRANSPORT_AIR);
@ -108,7 +106,7 @@ struct BuildAirToolbarWindow : Window {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_AT_AIRPORT:
@ -128,7 +126,7 @@ struct BuildAirToolbarWindow : Window {
}
void OnPlaceObject(Point pt, TileIndex tile) override
void OnPlaceObject([[maybe_unused]] Point pt, TileIndex tile) override
{
switch (this->last_user_action) {
case WID_AT_AIRPORT:
@ -143,12 +141,12 @@ struct BuildAirToolbarWindow : Window {
}
}
void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override
void OnPlaceDrag(ViewportPlaceMethod select_method, [[maybe_unused]] ViewportDragDropSelectionProcess select_proc, [[maybe_unused]] Point pt) override
{
VpSelectTilesWithMethod(pt.x, pt.y, select_method);
}
void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override
void OnPlaceMouseUp([[maybe_unused]] ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, [[maybe_unused]] Point pt, TileIndex start_tile, TileIndex end_tile) override
{
if (pt.x != -1 && select_proc == DDSP_DEMOLISH_AREA) {
GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
@ -310,7 +308,7 @@ public:
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_AP_CLASS_DROPDOWN: {
@ -481,7 +479,7 @@ public:
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_AP_CLASS_DROPDOWN:
@ -538,13 +536,14 @@ public:
}
if (change_class) {
/* If that fails, select the first available airport
* from a random class. */
* from the first class where airports are available. */
for (AirportClassID j = APC_BEGIN; j < APC_MAX; j++) {
AirportClass *apclass = AirportClass::Get(j);
for (uint i = 0; i < apclass->GetSpecCount(); i++) {
const AirportSpec *as = apclass->GetSpec(i);
if (as->IsAvailable()) {
_selected_airport_class = j;
this->vscroll->SetCount(apclass->GetSpecCount());
this->SelectOtherAirport(i);
return;
}
@ -557,13 +556,14 @@ public:
void OnDropdownSelect(int widget, int index) override
{
assert(widget == WID_AP_CLASS_DROPDOWN);
_selected_airport_class = (AirportClassID)index;
this->vscroll->SetCount(AirportClass::Get(_selected_airport_class)->GetSpecCount());
this->SelectFirstAvailableAirport(false);
if (widget == WID_AP_CLASS_DROPDOWN) {
_selected_airport_class = (AirportClassID)index;
this->vscroll->SetCount(AirportClass::Get(_selected_airport_class)->GetSpecCount());
this->SelectFirstAvailableAirport(false);
}
}
void OnRealtimeTick(uint delta_ms) override
void OnRealtimeTick([[maybe_unused]] uint delta_ms) override
{
CheckRedrawStationCoverage(this);
}

@ -301,7 +301,7 @@ public:
this->sel_group = id_g;
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_RV_SORT_ASCENDING_DESCENDING: {
@ -540,7 +540,7 @@ public:
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_RV_SORT_ASCENDING_DESCENDING:
@ -714,7 +714,7 @@ public:
}
}
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override
bool OnTooltip([[maybe_unused]] Point pt, int widget, TooltipCloseCondition close_cond) override
{
if (widget != WID_RV_TRAIN_WAGONREMOVE_TOGGLE) return false;
@ -738,7 +738,7 @@ public:
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (data != 0) {
/* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */

@ -152,7 +152,7 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
}
template <class Tbase_set>
bool BaseMedia<Tbase_set>::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename)
bool BaseMedia<Tbase_set>::AddFile(const std::string &filename, size_t basepath_length, const std::string &)
{
bool ret = false;
DEBUG(grf, 1, "Checking %s for base " SET_TYPE " set", filename.c_str());

@ -123,7 +123,7 @@ public:
if (!this->bitmap->HasTile(TileIndex(this->tile))) ++(*this);
}
inline TileIterator& operator ++()
inline TileIterator& operator ++() override
{
(*this).OrthogonalTileIterator::operator++();
while (this->tile != INVALID_TILE && !this->bitmap->HasTile(TileIndex(this->tile))) {
@ -132,7 +132,7 @@ public:
return *this;
}
virtual std::unique_ptr<TileIterator> Clone() const
std::unique_ptr<TileIterator> Clone() const override
{
return std::make_unique<BitmapTileIterator>(*this);
}

@ -180,7 +180,7 @@ size_t Blitter_32bppBase::BufferSize(uint width, uint height)
return sizeof(uint32) * width * height;
}
void Blitter_32bppBase::PaletteAnimate(const Palette &palette)
void Blitter_32bppBase::PaletteAnimate(const Palette &)
{
/* By default, 32bpp doesn't have palette animation */
}

@ -169,7 +169,7 @@ size_t Blitter_8bppBase::BufferSize(uint width, uint height)
return static_cast<size_t>(width) * height;
}
void Blitter_8bppBase::PaletteAnimate(const Palette &palette)
void Blitter_8bppBase::PaletteAnimate(const Palette &)
{
/* Video backend takes care of the palette animation */
}

@ -55,7 +55,7 @@ public:
ResizeWindow(this, _screen.width, _screen.height);
}
void DrawWidget(const Rect &r, int widget) const override
void DrawWidget(const Rect &r, int) const override
{
GfxFillRect(r.left, r.top, r.right, r.bottom, 4, FILLRECT_OPAQUE);
GfxFillRect(r.left, r.top, r.right, r.bottom, 0, FILLRECT_CHECKER);
@ -97,7 +97,7 @@ public:
this->Window::Close();
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget == WID_BEM_MESSAGE) {
*size = GetStringBoundingBox(STR_MISSING_GRAPHICS_ERROR);
@ -113,7 +113,7 @@ public:
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
if (widget == WID_BEM_QUIT) {
_exit_game = true;
@ -158,7 +158,7 @@ public:
this->BaseNetworkContentDownloadStatusWindow::Close();
}
void OnDownloadComplete(ContentID cid) override
void OnDownloadComplete(ContentID) override
{
/* We have completed downloading. We can trigger finding the right set now. */
BaseGraphics::FindSets();
@ -213,7 +213,7 @@ public:
this->Window::Close();
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
/* We cache the button size. This is safe as no reinit can happen here. */
if (this->button_size.width == 0) {
@ -238,12 +238,12 @@ public:
void DrawWidget(const Rect &r, int widget) const override
{
if (widget != 0) return;
if (widget != WID_BAFD_QUESTION) return;
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.frametext), STR_MISSING_GRAPHICS_SET_MESSAGE, TC_FROMSTRING, SA_CENTER);
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_BAFD_YES:
@ -333,7 +333,7 @@ public:
EM_ASM({ if (window["openttd_bootstrap"]) openttd_bootstrap($0, $1); }, this->downloaded_bytes, this->total_bytes);
}
void OnDownloadProgress(const ContentInfo *ci, int bytes) override
void OnDownloadProgress(const ContentInfo *, int bytes) override
{
/* A negative value means we are resetting; for example, when retrying or using a fallback. */
if (bytes < 0) {
@ -345,7 +345,7 @@ public:
EM_ASM({ if (window["openttd_bootstrap"]) openttd_bootstrap($0, $1); }, this->downloaded_bytes, this->total_bytes);
}
void OnDownloadComplete(ContentID cid) override
void OnDownloadComplete(ContentID) override
{
/* _exit_game is used to break out of the outer video driver's MainLoop. */
_exit_game = true;

@ -189,7 +189,7 @@ public:
this->Window::Close();
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_BBS_DROPDOWN_ORDER: {
@ -270,7 +270,7 @@ public:
return ES_NOT_HANDLED;
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
default: break;

@ -1569,7 +1569,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
void SelectEngine(EngineID engine)
{
CargoID cargo = this->cargo_filter[this->cargo_filter_criteria];
if (cargo == CF_ANY) cargo = CF_NONE;
if (cargo == CF_ANY || cargo == CF_ENGINES || cargo == CF_NONE) cargo = CT_INVALID;
this->sel_engine = engine;
this->SetBuyVehicleText();
@ -1853,7 +1853,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
this->eng_list.RebuildDone();
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_BV_SORT_ASCENDING_DESCENDING:
@ -1930,7 +1930,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
cmd = GetCmdBuildVeh(this->vehicle_type);
}
CargoID cargo = this->cargo_filter[this->cargo_filter_criteria];
if (cargo == CF_ANY || cargo == CF_ENGINES) cargo = CF_NONE;
if (cargo == CF_ANY || cargo == CF_ENGINES || cargo == CF_NONE) cargo = CT_INVALID;
DoCommandP(this->window_number, sel_eng | (cargo << 24), 0, cmd, callback);
/* Update last used variant and refresh if necessary. */
@ -1968,7 +1968,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
/* When switching to original acceleration model for road vehicles, clear the selected sort criteria if it is not available now. */
@ -2016,7 +2016,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_BV_LIST:
@ -2080,7 +2080,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
this->GenerateBuildList();
this->vscroll->SetCount(this->eng_list.size());
this->SetWidgetsDisabledState(this->sel_engine == INVALID_ENGINE, WID_BV_SHOW_HIDE, WID_BV_BUILD, WIDGET_LIST_END);
this->SetWidgetsDisabledState(this->sel_engine == INVALID_ENGINE, WID_BV_SHOW_HIDE, WID_BV_BUILD);
/* Disable renaming engines in network games if you are not the server. */
this->SetWidgetDisabledState(WID_BV_RENAME, this->sel_engine == INVALID_ENGINE || (_networking && !_network_server));

@ -41,41 +41,33 @@ void SetupCargoForClimate(LandscapeID l)
{
assert(l < lengthof(_default_climate_cargo));
/* Reset and disable all cargo types */
for (CargoID i = 0; i < lengthof(CargoSpec::array); i++) {
*CargoSpec::Get(i) = {};
CargoSpec::Get(i)->bitnum = INVALID_CARGO;
/* Set defaults for newer properties, which old GRFs do not know */
CargoSpec::Get(i)->multiplier = 0x100;
}
_cargo_mask = 0;
for (CargoID i = 0; i < lengthof(_default_climate_cargo[l]); i++) {
CargoLabel cl = _default_climate_cargo[l][i];
/* Copy from default cargo by label or index. */
auto insert = std::begin(CargoSpec::array);
for (const CargoLabel &cl : _default_climate_cargo[l]) {
/* Bzzt: check if cl is just an index into the cargo table */
/* Check if value is an index into the cargo table */
if (cl < lengthof(_default_cargo)) {
/* Copy the indexed cargo */
CargoSpec *cargo = CargoSpec::Get(i);
*cargo = _default_cargo[cl];
if (cargo->bitnum != INVALID_CARGO) SetBit(_cargo_mask, i);
continue;
}
/* Loop through each of the default cargo types to see if
* the label matches */
for (uint j = 0; j < lengthof(_default_cargo); j++) {
if (_default_cargo[j].label == cl) {
*CargoSpec::Get(i) = _default_cargo[j];
/* Populate the available cargo mask */
SetBit(_cargo_mask, i);
break;
/* Copy the default cargo by index. */
*insert = _default_cargo[cl];
} else {
/* Search for label in default cargo types and copy if found. */
auto found = std::find_if(std::begin(_default_cargo), std::end(_default_cargo), [&cl](const CargoSpec &cs) { return cs.label == cl; });
if (found != std::end(_default_cargo)) {
*insert = *found;
} else {
/* Index or label is invalid, this should not happen. */
NOT_REACHED();
}
}
if (insert->IsValid()) SetBit(_cargo_mask, insert->Index());
++insert;
}
/* Reset and disable remaining cargo types. */
std::fill(insert, std::end(CargoSpec::array), CargoSpec{});
}
/**
@ -123,7 +115,7 @@ CargoID GetCargoIDByLabel(CargoLabel cl)
*/
CargoID GetCargoIDByBitnum(uint8 bitnum)
{
if (bitnum == INVALID_CARGO) return CT_INVALID;
if (bitnum == INVALID_CARGO_BITNUM) return CT_INVALID;
for (const CargoSpec *cs : CargoSpec::Iterate()) {
if (cs->bitnum == bitnum) return cs->Index();
@ -150,6 +142,7 @@ SpriteID CargoSpec::GetCargoIcon() const
return sprite;
}
std::array<uint8_t, NUM_CARGO> _sorted_cargo_types; ///< Sort order of cargoes by cargo ID.
std::vector<const CargoSpec *> _sorted_cargo_specs; ///< Cargo specifications sorted alphabetically by name.
span<const CargoSpec *> _sorted_standard_cargo_specs; ///< Standard cargo specifications sorted alphabetically by name.
@ -194,6 +187,11 @@ void InitializeSortedCargoSpecs()
/* Sort cargo specifications by cargo class and name. */
std::sort(_sorted_cargo_specs.begin(), _sorted_cargo_specs.end(), &CargoSpecClassSorter);
/* Populate */
for (auto it = std::begin(_sorted_cargo_specs); it != std::end(_sorted_cargo_specs); ++it) {
_sorted_cargo_types[(*it)->Index()] = static_cast<uint8_t>(it - std::begin(_sorted_cargo_specs));
}
/* Count the number of standard cargos and fill the mask. */
_standard_cargo_mask = 0;
uint8 nb_standard_cargo = 0;

@ -51,16 +51,17 @@ enum CargoClass {
CC_SPECIAL = 1 << 15, ///< Special bit used for livery refit tricks instead of normal cargoes.
};
static const byte INVALID_CARGO = 0xFF; ///< Constant representing invalid cargo
static const byte INVALID_CARGO_BITNUM = 0xFF; ///< Constant representing invalid cargo
/** Specification of a cargo type. */
struct CargoSpec {
uint8 bitnum; ///< Cargo bit number, is #INVALID_CARGO for a non-used spec.
CargoLabel label; ///< Unique label of the cargo type.
uint8 bitnum{INVALID_CARGO_BITNUM}; ///< Cargo bit number, is #INVALID_CARGO_BITNUM for a non-used spec.
uint8 legend_colour;
uint8 rating_colour;
uint8 weight; ///< Weight of a single unit of this cargo type in 1/16 ton (62.5 kg).
uint16 multiplier; ///< Capacity multiplier for vehicles. (8 fractional bits)
uint16 multiplier{0x100}; ///< Capacity multiplier for vehicles. (8 fractional bits)
uint16 classes; ///< Classes of this cargo type. @see CargoClass
int32 initial_payment; ///< Initial payment rate before inflation is applied.
uint8 transit_periods[2];
@ -76,7 +77,6 @@ struct CargoSpec {
SpriteID sprite; ///< Icon to display this cargo type, may be \c 0xFFF (which means to resolve an action123 chain).
uint16 classes; ///< Classes of this cargo type. @see CargoClass
const struct GRFFile *grffile; ///< NewGRF where #group belongs to.
const struct SpriteGroup *group;
@ -107,7 +107,7 @@ struct CargoSpec {
*/
inline bool IsValid() const
{
return this->bitnum != INVALID_CARGO;
return this->bitnum != INVALID_CARGO_BITNUM;
}
/**
@ -197,6 +197,7 @@ CargoID GetCargoIDByBitnum(uint8 bitnum);
CargoID GetDefaultCargoID(LandscapeID l, CargoType ct);
void InitializeSortedCargoSpecs();
extern std::array<uint8_t, NUM_CARGO> _sorted_cargo_types;
extern std::vector<const CargoSpec *> _sorted_cargo_specs;
extern span<const CargoSpec *> _sorted_standard_cargo_specs;

@ -327,7 +327,7 @@ struct CheatWindow : Window {
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget != WID_C_PANEL) return;
@ -380,8 +380,10 @@ struct CheatWindow : Window {
size->height = WidgetDimensions::scaled.framerect.Vertical() + this->line_height * lines;
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
if (widget != WID_C_PANEL) return;
Rect r = this->GetWidget<NWidgetBase>(WID_C_PANEL)->GetCurrentRect().Shrink(WidgetDimensions::scaled.framerect);
uint btn = (pt.y - r.top) / this->line_height;
uint x = pt.x - r.left;

@ -197,7 +197,7 @@ static void DrawTile_Clear(TileInfo *ti, DrawTileProcParams params)
DrawBridgeMiddle(ti);
}
static int GetSlopePixelZ_Clear(TileIndex tile, uint x, uint y, bool ground_vehicle)
static int GetSlopePixelZ_Clear(TileIndex tile, uint x, uint y, bool)
{
int z;
Slope tileh = GetTilePixelSlope(tile, &z);
@ -205,7 +205,7 @@ static int GetSlopePixelZ_Clear(TileIndex tile, uint x, uint y, bool ground_vehi
return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh);
}
static Foundation GetFoundation_Clear(TileIndex tile, Slope tileh)
static Foundation GetFoundation_Clear(TileIndex, Slope)
{
return FOUNDATION_NONE;
}
@ -426,7 +426,7 @@ get_out:;
} while (--i);
}
static TrackStatus GetTileTrackStatus_Clear(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
static TrackStatus GetTileTrackStatus_Clear(TileIndex, TransportType, uint, DiagDirection)
{
return 0;
}
@ -450,12 +450,12 @@ static void GetTileDesc_Clear(TileIndex tile, TileDesc *td)
td->owner[0] = GetTileOwner(tile);
}
static void ChangeTileOwner_Clear(TileIndex tile, Owner old_owner, Owner new_owner)
static void ChangeTileOwner_Clear(TileIndex, Owner, Owner)
{
return;
}
static CommandCost TerraformTile_Clear(TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new)
static CommandCost TerraformTile_Clear(TileIndex tile, DoCommandFlag flags, int, Slope)
{
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
}

@ -398,7 +398,7 @@ struct CompanyFinancesWindow : Window {
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_CF_EXPS_CATEGORY:
@ -494,7 +494,7 @@ struct CompanyFinancesWindow : Window {
this->DrawWidgets();
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_CF_TOGGLE_SIZE: // toggle size
@ -643,7 +643,7 @@ public:
return ScaleGUITrad(28) + WidgetDimensions::scaled.hsep_normal + GetStringBoundingBox(this->String()).width + WidgetDimensions::scaled.dropdowntext.Horizontal();
}
uint Height(uint width) const override
uint Height(uint) const override
{
return std::max(FONT_HEIGHT_NORMAL, ScaleGUITrad(12) + WidgetDimensions::scaled.vsep_normal);
}
@ -653,7 +653,7 @@ public:
return true;
}
void Draw(const Rect &r, bool sel, Colours bg_colour) const override
void Draw(const Rect &r, bool sel, Colours) const override
{
bool rtl = _current_text_dir == TD_RTL;
int icon_y = CenterBounds(r.top, r.bottom, 0);
@ -830,7 +830,7 @@ public:
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_SCL_SPACER_DROPDOWN: {
@ -1001,7 +1001,7 @@ public:
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
/* Livery Class buttons */
@ -1106,7 +1106,7 @@ public:
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
@ -1127,7 +1127,7 @@ public:
return;
}
this->SetWidgetsDisabledState(true, WID_SCL_CLASS_RAIL, WID_SCL_CLASS_ROAD, WID_SCL_CLASS_SHIP, WID_SCL_CLASS_AIRCRAFT, WIDGET_LIST_END);
this->SetWidgetsDisabledState(true, WID_SCL_CLASS_RAIL, WID_SCL_CLASS_ROAD, WID_SCL_CLASS_SHIP, WID_SCL_CLASS_AIRCRAFT);
bool current_class_valid = this->livery_class == LC_OTHER || this->livery_class >= LC_GROUP_RAIL;
if (_settings_client.gui.liveries == LIT_ALL || (_settings_client.gui.liveries == LIT_COMPANY && this->window_number == _local_company)) {
@ -1495,7 +1495,7 @@ public:
this->number_dim = number_dim;
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT:
@ -1543,8 +1543,8 @@ public:
void OnPaint() override
{
/* lower the non-selected gender button */
this->SetWidgetsLoweredState(!this->is_female, WID_SCMF_MALE, WID_SCMF_MALE2, WIDGET_LIST_END);
this->SetWidgetsLoweredState( this->is_female, WID_SCMF_FEMALE, WID_SCMF_FEMALE2, WIDGET_LIST_END);
this->SetWidgetsLoweredState(!this->is_female, WID_SCMF_MALE, WID_SCMF_MALE2);
this->SetWidgetsLoweredState( this->is_female, WID_SCMF_FEMALE, WID_SCMF_FEMALE2);
/* advanced company manager face selection window */
@ -1559,44 +1559,44 @@ public:
/* Eye colour buttons */
this->SetWidgetsDisabledState(_cmf_info[CMFV_EYE_COLOUR].valid_values[this->ge] < 2,
WID_SCMF_EYECOLOUR, WID_SCMF_EYECOLOUR_L, WID_SCMF_EYECOLOUR_R, WIDGET_LIST_END);
WID_SCMF_EYECOLOUR, WID_SCMF_EYECOLOUR_L, WID_SCMF_EYECOLOUR_R);
/* Chin buttons */
this->SetWidgetsDisabledState(_cmf_info[CMFV_CHIN].valid_values[this->ge] < 2,
WID_SCMF_CHIN, WID_SCMF_CHIN_L, WID_SCMF_CHIN_R, WIDGET_LIST_END);
WID_SCMF_CHIN, WID_SCMF_CHIN_L, WID_SCMF_CHIN_R);
/* Eyebrows buttons */
this->SetWidgetsDisabledState(_cmf_info[CMFV_EYEBROWS].valid_values[this->ge] < 2,
WID_SCMF_EYEBROWS, WID_SCMF_EYEBROWS_L, WID_SCMF_EYEBROWS_R, WIDGET_LIST_END);
WID_SCMF_EYEBROWS, WID_SCMF_EYEBROWS_L, WID_SCMF_EYEBROWS_R);
/* Lips or (if it a male face with a moustache) moustache buttons */
this->SetWidgetsDisabledState(_cmf_info[this->is_moust_male ? CMFV_MOUSTACHE : CMFV_LIPS].valid_values[this->ge] < 2,
WID_SCMF_LIPS_MOUSTACHE, WID_SCMF_LIPS_MOUSTACHE_L, WID_SCMF_LIPS_MOUSTACHE_R, WIDGET_LIST_END);
WID_SCMF_LIPS_MOUSTACHE, WID_SCMF_LIPS_MOUSTACHE_L, WID_SCMF_LIPS_MOUSTACHE_R);
/* Nose buttons | male faces with moustache haven't any nose options */
this->SetWidgetsDisabledState(_cmf_info[CMFV_NOSE].valid_values[this->ge] < 2 || this->is_moust_male,
WID_SCMF_NOSE, WID_SCMF_NOSE_L, WID_SCMF_NOSE_R, WIDGET_LIST_END);
WID_SCMF_NOSE, WID_SCMF_NOSE_L, WID_SCMF_NOSE_R);
/* Hair buttons */
this->SetWidgetsDisabledState(_cmf_info[CMFV_HAIR].valid_values[this->ge] < 2,
WID_SCMF_HAIR, WID_SCMF_HAIR_L, WID_SCMF_HAIR_R, WIDGET_LIST_END);
WID_SCMF_HAIR, WID_SCMF_HAIR_L, WID_SCMF_HAIR_R);
/* Jacket buttons */
this->SetWidgetsDisabledState(_cmf_info[CMFV_JACKET].valid_values[this->ge] < 2,
WID_SCMF_JACKET, WID_SCMF_JACKET_L, WID_SCMF_JACKET_R, WIDGET_LIST_END);
WID_SCMF_JACKET, WID_SCMF_JACKET_L, WID_SCMF_JACKET_R);
/* Collar buttons */
this->SetWidgetsDisabledState(_cmf_info[CMFV_COLLAR].valid_values[this->ge] < 2,
WID_SCMF_COLLAR, WID_SCMF_COLLAR_L, WID_SCMF_COLLAR_R, WIDGET_LIST_END);
WID_SCMF_COLLAR, WID_SCMF_COLLAR_L, WID_SCMF_COLLAR_R);
/* Tie/earring buttons | female faces without earring haven't any earring options */
this->SetWidgetsDisabledState(_cmf_info[CMFV_TIE_EARRING].valid_values[this->ge] < 2 ||
(this->is_female && GetCompanyManagerFaceBits(this->face, CMFV_HAS_TIE_EARRING, this->ge) == 0),
WID_SCMF_TIE_EARRING, WID_SCMF_TIE_EARRING_L, WID_SCMF_TIE_EARRING_R, WIDGET_LIST_END);
WID_SCMF_TIE_EARRING, WID_SCMF_TIE_EARRING_L, WID_SCMF_TIE_EARRING_R);
/* Glasses buttons | faces without glasses haven't any glasses options */
this->SetWidgetsDisabledState(_cmf_info[CMFV_GLASSES].valid_values[this->ge] < 2 || GetCompanyManagerFaceBits(this->face, CMFV_HAS_GLASSES, this->ge) == 0,
WID_SCMF_GLASSES, WID_SCMF_GLASSES_L, WID_SCMF_GLASSES_R, WIDGET_LIST_END);
WID_SCMF_GLASSES, WID_SCMF_GLASSES_L, WID_SCMF_GLASSES_R);
this->DrawWidgets();
}
@ -1671,7 +1671,7 @@ public:
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
/* Toggle size, advanced/simple face selection */
@ -1926,7 +1926,7 @@ struct CompanyInfrastructureWindow : Window
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
const Company *c = Company::Get((CompanyID)this->window_number);
@ -2192,7 +2192,7 @@ struct CompanyInfrastructureWindow : Window
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
@ -2462,7 +2462,7 @@ struct CompanyWindow : Window
this->DrawWidgets();
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_C_FACE: {
@ -2675,7 +2675,7 @@ struct CompanyWindow : Window
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_C_NEW_FACE: DoSelectCompanyManagerFace(this); break;
@ -2780,7 +2780,7 @@ struct CompanyWindow : Window
this->SetDirty();
}
void OnPlaceObject(Point pt, TileIndex tile) override
void OnPlaceObject([[maybe_unused]] Point pt, TileIndex tile) override
{
if (DoCommandP(tile, OBJECT_HQ, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS)) && !_shift_pressed) {
ResetObjectToPlace();
@ -2949,7 +2949,7 @@ struct BuyCompanyWindow : Window {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_BC_NO:

@ -93,7 +93,7 @@ static_assert(lengthof(_cmf_info) == CMFV_END);
* @pre _cmf_info[cmfv].valid_values[ge] != 0
* @return the requested bits
*/
static inline uint GetCompanyManagerFaceBits(CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge)
static inline uint GetCompanyManagerFaceBits(CompanyManagerFace cmf, CompanyManagerFaceVariable cmfv, [[maybe_unused]] GenderEthnicity ge)
{
assert(_cmf_info[cmfv].valid_values[ge] != 0);
@ -108,7 +108,7 @@ static inline uint GetCompanyManagerFaceBits(CompanyManagerFace cmf, CompanyMana
* @param val the new value
* @pre val < _cmf_info[cmfv].valid_values[ge]
*/
static inline void SetCompanyManagerFaceBits(CompanyManagerFace &cmf, CompanyManagerFaceVariable cmfv, GenderEthnicity ge, uint val)
static inline void SetCompanyManagerFaceBits(CompanyManagerFace &cmf, CompanyManagerFaceVariable cmfv, [[maybe_unused]] GenderEthnicity ge, uint val)
{
assert(val < _cmf_info[cmfv].valid_values[ge]);

@ -107,7 +107,7 @@ public:
static ConsoleFileList _console_file_list; ///< File storage cache for the console.
/* console command defines */
#define DEF_CONSOLE_CMD(function) static bool function(byte argc, char *argv[])
#define DEF_CONSOLE_CMD(function) static bool function([[maybe_unused]] byte argc, [[maybe_unused]] char *argv[])
#define DEF_CONSOLE_HOOK(function) static ConsoleHookResult function(bool echo)
/****************
@ -2105,17 +2105,17 @@ static ContentType StringToContentType(const char *str)
/** Asynchronous callback */
struct ConsoleContentCallback : public ContentCallback {
void OnConnect(bool success)
void OnConnect(bool success) override
{
IConsolePrintF(CC_DEFAULT, "Content server connection %s", success ? "established" : "failed");
}
void OnDisconnect()
void OnDisconnect() override
{
IConsolePrintF(CC_DEFAULT, "Content server connection closed");
}
void OnDownloadComplete(ContentID cid)
void OnDownloadComplete(ContentID cid) override
{
IConsolePrintF(CC_DEFAULT, "Completed download of %d", cid);
}

@ -281,7 +281,7 @@ struct IConsoleWindow : Window
return ES_HANDLED;
}
void InsertTextString(int wid, const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) override
void InsertTextString(int, const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) override
{
if (_iconsole_cmdline.InsertString(str, marked, caret, insert_location, replacement_end)) {
IConsoleWindow::scroll = 0;

@ -99,7 +99,7 @@ struct Pool : PoolBase {
uint64 *free_bitmap; ///< Pointer to free bitmap
Pool(const char *name);
virtual void CleanPool();
void CleanPool() override;
/**
* Returns Titem with given index
@ -277,13 +277,12 @@ struct Pool : PoolBase {
/**
* Allocates space for new Titem at given memory address
* @param size size of Titem
* @param ptr where are we allocating the item?
* @return pointer to allocated memory (== ptr)
* @note use of this is strongly discouraged
* @pre the memory must not be allocated in the Pool!
*/
inline void *operator new(size_t size, void *ptr)
inline void *operator new(size_t, void *ptr)
{
for (size_t i = 0; i < Tpool->first_unused; i++) {
/* Don't allow creating new objects over existing.
@ -377,7 +376,7 @@ struct Pool : PoolBase {
* @note when this function is called, PoolItem::Get(index) == nullptr.
* @note it's called only when !CleaningPool()
*/
static inline void PostDestructor(size_t index) { }
static inline void PostDestructor([[maybe_unused]] size_t index) { }
/**
* Dummy function called before a pool is about to be cleaned.

@ -166,7 +166,7 @@ void ottd_cpuid(int info[4], int type)
}
}
#else
void ottd_cpuid(int info[4], int type)
void ottd_cpuid(int info[4], int)
{
info[0] = info[1] = info[2] = info[3] = 0;
}

@ -105,7 +105,7 @@ struct SetDateWindow : Window {
ShowDropDownList(this, std::move(list), selected, widget);
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
Dimension d = {0, 0};
switch (widget) {
@ -143,7 +143,7 @@ struct SetDateWindow : Window {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_SD_DAY:
@ -195,7 +195,7 @@ struct SetMinutesWindow : SetDateWindow
* Helper function to construct the dropdown.
* @param widget the dropdown widget to create the dropdown for
*/
virtual void ShowDateDropDown(int widget)
virtual void ShowDateDropDown(int widget) override
{
int selected;
DropDownList list;
@ -224,7 +224,7 @@ struct SetMinutesWindow : SetDateWindow
ShowDropDownList(this, std::move(list), selected, widget);
}
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
{
Dimension d = {0, 0};
switch (widget) {
@ -250,7 +250,7 @@ struct SetMinutesWindow : SetDateWindow
*size = d;
}
virtual void SetStringParameters(int widget) const
virtual void SetStringParameters(int widget) const override
{
switch (widget) {
case WID_SD_DAY: SetDParam(0, MINUTES_MINUTE(minutes)); break;
@ -258,7 +258,7 @@ struct SetMinutesWindow : SetDateWindow
}
}
virtual void OnClick(Point pt, int widget, int click_count)
virtual void OnClick(Point pt, int widget, int click_count) override
{
switch (widget) {
case WID_SD_DAY:
@ -276,7 +276,7 @@ struct SetMinutesWindow : SetDateWindow
}
}
virtual void OnDropdownSelect(int widget, int index)
virtual void OnDropdownSelect(int widget, int index) override
{
Minutes current = 0;
switch (widget) {

@ -657,7 +657,7 @@ struct DepotWindow : Window {
this->flag_size = maxdim(GetScaledSpriteSize(SPR_FLAG_VEH_STOPPED), GetScaledSpriteSize(SPR_FLAG_VEH_RUNNING));
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_D_MATRIX: {
@ -705,7 +705,7 @@ struct DepotWindow : Window {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
this->generate_list = true;
}
@ -756,13 +756,12 @@ struct DepotWindow : Window {
WID_D_BUILD,
WID_D_CLONE,
WID_D_RENAME,
WID_D_AUTOREPLACE,
WIDGET_LIST_END);
WID_D_AUTOREPLACE);
this->DrawWidgets();
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_D_MATRIX: // List
@ -844,7 +843,7 @@ struct DepotWindow : Window {
DoCommandP(0, this->GetDepotIndex(), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), nullptr, str);
}
bool OnRightClick(Point pt, int widget) override
bool OnRightClick([[maybe_unused]] Point pt, int widget) override
{
if (widget != WID_D_MATRIX) return false;

@ -714,7 +714,7 @@ static bool DisasterTick_Submarine(DisasterVehicle *v)
}
static bool DisasterTick_NULL(DisasterVehicle *v)
static bool DisasterTick_NULL(DisasterVehicle *)
{
return true;
}

@ -47,9 +47,9 @@ struct DisasterVehicle FINAL : public SpecializedVehicle<DisasterVehicle, VEH_DI
virtual ~DisasterVehicle();
void UpdatePosition(int x, int y, int z);
void UpdateDeltaXY();
void UpdateDeltaXY() override;
void UpdateImage();
bool Tick();
bool Tick() override;
};
#endif /* DISASTER_VEHICLE_H */

@ -118,7 +118,7 @@ struct BuildDocksToolbarWindow : Window {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
@ -126,8 +126,7 @@ struct BuildDocksToolbarWindow : Window {
this->SetWidgetsDisabledState(!can_build,
WID_DT_DEPOT,
WID_DT_STATION,
WID_DT_BUOY,
WIDGET_LIST_END);
WID_DT_BUOY);
if (!can_build) {
CloseWindowById(WC_BUILD_STATION, TRANSPORT_WATER);
CloseWindowById(WC_BUILD_DEPOT, TRANSPORT_WATER);
@ -147,7 +146,7 @@ struct BuildDocksToolbarWindow : Window {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_DT_CANAL: // Build canal button
@ -188,7 +187,7 @@ struct BuildDocksToolbarWindow : Window {
this->last_clicked_widget = (DockToolbarWidgets)widget;
}
void OnPlaceObject(Point pt, TileIndex tile) override
void OnPlaceObject([[maybe_unused]] Point pt, TileIndex tile) override
{
switch (this->last_clicked_widget) {
case WID_DT_CANAL: // Build canal button
@ -237,12 +236,12 @@ struct BuildDocksToolbarWindow : Window {
}
}
void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override
void OnPlaceDrag(ViewportPlaceMethod select_method, [[maybe_unused]] ViewportDragDropSelectionProcess select_proc, [[maybe_unused]] Point pt) override
{
VpSelectTilesWithMethod(pt.x, pt.y, select_method);
}
void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override
void OnPlaceMouseUp([[maybe_unused]] ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, [[maybe_unused]] Point pt, TileIndex start_tile, TileIndex end_tile) override
{
if (pt.x != -1) {
switch (select_proc) {
@ -273,7 +272,7 @@ struct BuildDocksToolbarWindow : Window {
CloseWindowByClass(WC_BUILD_BRIDGE);
}
void OnPlacePresize(Point pt, TileIndex tile_from) override
void OnPlacePresize([[maybe_unused]] Point pt, TileIndex tile_from) override
{
TileIndex tile_to = tile_from;
@ -458,7 +457,7 @@ public:
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case BDSW_LT_OFF:
@ -473,7 +472,7 @@ public:
}
}
void OnRealtimeTick(uint delta_ms) override
void OnRealtimeTick([[maybe_unused]] uint delta_ms) override
{
CheckRedrawStationCoverage(this);
}
@ -526,7 +525,7 @@ public:
UpdateDocksDirection();
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_BDD_X:
@ -560,7 +559,7 @@ public:
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_BDD_X:

@ -1396,9 +1396,10 @@ static void TriggerIndustryProduction(Industry *i)
} else {
for (uint ci_in = 0; ci_in < lengthof(i->incoming_cargo_waiting); ci_in++) {
uint cargo_waiting = i->incoming_cargo_waiting[ci_in];
if (cargo_waiting == 0) continue;
if (cargo_waiting == 0 || i->accepts_cargo[ci_in] == CT_INVALID) continue;
for (uint ci_out = 0; ci_out < lengthof(i->produced_cargo_waiting); ci_out++) {
if (i->produced_cargo[ci_out] == CT_INVALID) continue;
i->produced_cargo_waiting[ci_out] = ClampTo<uint16_t>(i->produced_cargo_waiting[ci_out] + (cargo_waiting * indspec->input_cargo_multiplier[ci_in][ci_out] / 256));
}

@ -30,8 +30,8 @@ struct EffectVehicle FINAL : public SpecializedVehicle<EffectVehicle, VEH_EFFECT
/** We want to 'destruct' the right class. */
virtual ~EffectVehicle() { this->RemoveEffectVehicleFromTickCache(); }
void UpdateDeltaXY();
bool Tick();
void UpdateDeltaXY() override;
bool Tick() override;
TransparencyOption GetTransparencyOption() const;
void AddEffectVehicleToTickCache();
void RemoveEffectVehicleFromTickCache();

@ -76,7 +76,7 @@ struct EnginePreviewWindow : Window {
this->flags |= WF_STICKY;
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget != WID_EP_QUESTION) return;
@ -121,7 +121,7 @@ struct EnginePreviewWindow : Window {
DrawStringMultiLine(r.left, r.right, y, r.bottom, GetEngineInfoString(engine), TC_FROMSTRING, SA_CENTER);
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_EP_YES:
@ -133,7 +133,7 @@ struct EnginePreviewWindow : Window {
}
}
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;

@ -177,7 +177,7 @@ public:
this->InitNested();
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_EM_MESSAGE: {
@ -241,7 +241,7 @@ public:
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
/* If company gets shut down, while displaying an error about it, remove the error message. */
if (this->face != INVALID_COMPANY && !Company::IsValidID(this->face)) this->Close();

@ -280,10 +280,9 @@ public:
/**
* Try to add a fios item set with the given filename.
* @param filename the full path to the file to read
* @param basepath_length amount of characters to chop of before to get a relative filename
* @return true if the file is added.
*/
bool FiosFileScanner::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename)
bool FiosFileScanner::AddFile(const std::string &filename, size_t, const std::string &)
{
auto sep = filename.rfind('.');
if (sep == std::string::npos) return false;
@ -660,7 +659,7 @@ public:
this->scanned = true;
}
bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override
bool AddFile(const std::string &filename, size_t, const std::string &) override
{
FILE *f = FioFOpenFile(filename, "r", SCENARIO_DIR);
if (f == nullptr) return false;

@ -291,13 +291,13 @@ private:
QueryString filter_editbox; ///< Filter editbox;
std::vector<FiosItem *> display_list; ///< Filtered display list
static void SaveGameConfirmationCallback(Window *w, bool confirmed)
static void SaveGameConfirmationCallback(Window *, bool confirmed)
{
/* File name has already been written to _file_to_saveload */
if (confirmed) _switch_mode = SM_SAVE_GAME;
}
static void SaveHeightmapConfirmationCallback(Window *w, bool confirmed)
static void SaveHeightmapConfirmationCallback(Window *, bool confirmed)
{
/* File name has already been written to _file_to_saveload */
if (confirmed) _switch_mode = SM_SAVE_HEIGHTMAP;
@ -587,7 +587,7 @@ public:
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_SL_BACKGROUND:
@ -620,7 +620,7 @@ public:
this->DrawWidgets();
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_SL_SORT_BYNAME: // Sort save names by name
@ -742,7 +742,7 @@ public:
}
}
void OnMouseOver(Point pt, int widget) override
void OnMouseOver([[maybe_unused]] Point pt, int widget) override
{
if (widget == WID_SL_DRIVES_DIRECTORIES_LIST) {
auto it = this->vscroll->GetScrolledItemFromWidget(this->display_list, pt.y, this, WID_SL_DRIVES_DIRECTORIES_LIST, WidgetDimensions::scaled.inset.top);

@ -187,5 +187,5 @@ bool HasAntialiasedFonts()
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(WITH_FONTCONFIG) && !defined(WITH_COCOA)
bool SetFallbackFont(FontCacheSettings *settings, const std::string &language_isocode, int winlangid, MissingGlyphSearcher *callback) { return false; }
bool SetFallbackFont(FontCacheSettings *, const std::string &, int, MissingGlyphSearcher *) { return false; }
#endif /* !defined(_WIN32) && !defined(__APPLE__) && !defined(WITH_FONTCONFIG) && !defined(WITH_COCOA) */

@ -63,7 +63,7 @@ FreeTypeFontCache::FreeTypeFontCache(FontSize fs, FT_Face face, int pixels) : Tr
this->SetFontSize(fs, face, pixels);
}
void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels)
void FreeTypeFontCache::SetFontSize(FontSize, FT_Face, int pixels)
{
if (pixels == 0) {
/* Try to determine a good height based on the minimal height recommended by the font. */

@ -23,16 +23,16 @@ private:
public:
SpriteFontCache(FontSize fs);
~SpriteFontCache();
virtual void SetUnicodeGlyph(WChar key, SpriteID sprite);
virtual void InitializeUnicodeGlyphMap();
virtual void ClearFontCache();
virtual const Sprite *GetGlyph(GlyphID key);
virtual uint GetGlyphWidth(GlyphID key);
virtual bool GetDrawGlyphShadow();
virtual GlyphID MapCharToGlyph(WChar key) { assert(IsPrintable(key)); return SPRITE_GLYPH | key; }
virtual const void *GetFontTable(uint32 tag, size_t &length) { length = 0; return nullptr; }
virtual std::string GetFontName() { return "sprite"; }
virtual bool IsBuiltInFont() { return true; }
void SetUnicodeGlyph(char32_t key, SpriteID sprite) override;
void InitializeUnicodeGlyphMap() override;
void ClearFontCache() override;
const Sprite *GetGlyph(GlyphID key) override;
uint GetGlyphWidth(GlyphID key) override;
bool GetDrawGlyphShadow() override;
GlyphID MapCharToGlyph(char32_t key) override { assert(IsPrintable(key)); return SPRITE_GLYPH | key; }
const void *GetFontTable(uint32_t, size_t &length) override { length = 0; return nullptr; }
std::string GetFontName() override { return "sprite"; }
bool IsBuiltInFont() override { return true; }
};
#endif /* SPRITEFONTCACHE_H */

@ -456,7 +456,7 @@ struct FramerateWindow : Window {
ResizeWindow(this, 0, (std::max(MIN_ELEMENTS, this->num_displayed) - MIN_ELEMENTS) * FONT_HEIGHT_NORMAL);
}
void OnRealtimeTick(uint delta_ms) override
void OnRealtimeTick([[maybe_unused]] uint delta_ms) override
{
bool elapsed = this->next_update.Elapsed(delta_ms);
@ -538,7 +538,7 @@ struct FramerateWindow : Window {
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_FRW_RATE_GAMELOOP:
@ -691,7 +691,7 @@ struct FramerateWindow : Window {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_FRW_TIMES_NAMES:
@ -779,7 +779,7 @@ struct FrametimeGraphWindow : Window {
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget == WID_FGW_GRAPH) {
SetDParam(0, 100);

@ -137,7 +137,7 @@ struct GSConfigWindow : public Window {
this->vscroll->SetCount(this->visible_settings.size());
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_GSC_SETTINGS:
@ -245,7 +245,7 @@ struct GSConfigWindow : public Window {
this->DrawWidgets();
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
if (widget >= WID_GSC_TEXTFILE && widget < WID_GSC_TEXTFILE + TFT_CONTENT_END) {
if (GameConfig::GetConfig() == nullptr) return;
@ -321,7 +321,7 @@ struct GSConfigWindow : public Window {
list.emplace_back(new DropDownListStringItem(config_item.labels.find(i)->second, i, false));
}
ShowDropDownListAt(this, std::move(list), old_val, -1, wi_rect, COLOUR_ORANGE);
ShowDropDownListAt(this, std::move(list), old_val, WID_GSC_SETTING_DROPDOWN, wi_rect, COLOUR_ORANGE);
}
}
} else if (IsInsideMM(x, 0, SETTING_BUTTON_WIDTH)) {
@ -374,12 +374,14 @@ struct GSConfigWindow : public Window {
void OnDropdownSelect(int widget, int index) override
{
if (widget != WID_GSC_SETTING_DROPDOWN) return;
assert(this->clicked_dropdown);
SetValue(index);
}
void OnDropdownClose(Point pt, int widget, int index, bool instant_close) override
void OnDropdownClose(Point, int widget, int, bool) override
{
if (widget != WID_GSC_SETTING_DROPDOWN) return;
/* We cannot raise the dropdown button just yet. OnClick needs some hint, whether
* the same dropdown button was clicked again, and then not open the dropdown again.
* So, we only remember that it was closed, and process it on the next OnPaint, which is
@ -407,7 +409,7 @@ struct GSConfigWindow : public Window {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;

@ -143,22 +143,22 @@ struct TranslationWriter : LanguageWriter {
{
}
void WriteHeader(const LanguagePackHeader *header)
void WriteHeader(const LanguagePackHeader *) override
{
/* We don't use the header. */
}
void Finalise()
void Finalise() override
{
/* Nothing to do. */
}
void WriteLength(uint length)
void WriteLength(uint) override
{
/* We don't write the length. */
}
void Write(const byte *buffer, size_t length)
void Write(const byte *buffer, size_t length) override
{
this->strings.emplace_back((const char *)buffer, length);
}
@ -176,12 +176,12 @@ struct StringNameWriter : HeaderWriter {
{
}
void WriteStringID(const char *name, int stringid)
void WriteStringID(const char *name, int stringid) override
{
if (stringid == (int)this->strings.size()) this->strings.emplace_back(name);
}
void Finalise(const StringData &data)
void Finalise(const StringData &) override
{
/* Nothing to do. */
}
@ -207,7 +207,7 @@ public:
this->FileScanner::Scan(".txt", directory, false);
}
bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override
bool AddFile(const std::string &filename, size_t, const std::string &) override
{
if (exclude == filename) return true;

@ -580,7 +580,7 @@ struct GenerateLandscapeWindow : public Window {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
/* Update the climate buttons */
@ -595,7 +595,7 @@ struct GenerateLandscapeWindow : public Window {
this->SetWidgetDisabledState(WID_GL_VARIETY_PULLDOWN, _settings_newgame.game_creation.land_generator == LG_ORIGINAL);
this->SetWidgetDisabledState(WID_GL_BORDERS_RANDOM, _settings_newgame.game_creation.land_generator == LG_ORIGINAL || !_settings_newgame.construction.freeform_edges);
this->SetWidgetsDisabledState(_settings_newgame.game_creation.land_generator == LG_ORIGINAL || !_settings_newgame.construction.freeform_edges || _settings_newgame.game_creation.water_borders == BORDERS_RANDOM,
WID_GL_WATER_NW, WID_GL_WATER_NE, WID_GL_WATER_SE, WID_GL_WATER_SW, WIDGET_LIST_END);
WID_GL_WATER_NW, WID_GL_WATER_NE, WID_GL_WATER_SE, WID_GL_WATER_SW);
this->SetWidgetLoweredState(WID_GL_BORDERS_RANDOM, _settings_newgame.game_creation.water_borders == BORDERS_RANDOM);
@ -605,7 +605,7 @@ struct GenerateLandscapeWindow : public Window {
this->SetWidgetLoweredState(WID_GL_WATER_SW, HasBit(_settings_newgame.game_creation.water_borders, BORDER_SW));
this->SetWidgetsDisabledState(_settings_newgame.game_creation.land_generator == LG_ORIGINAL && (_settings_newgame.game_creation.landscape == LT_ARCTIC || _settings_newgame.game_creation.landscape == LT_TROPIC),
WID_GL_TERRAIN_PULLDOWN, WID_GL_WATER_PULLDOWN, WIDGET_LIST_END);
WID_GL_TERRAIN_PULLDOWN, WID_GL_WATER_PULLDOWN);
}
/* Disable snowline if not arctic */
@ -655,7 +655,7 @@ struct GenerateLandscapeWindow : public Window {
this->SetDirty();
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
Dimension d{0, (uint)FONT_HEIGHT_NORMAL};
const StringID *strs = nullptr;
@ -758,7 +758,7 @@ struct GenerateLandscapeWindow : public Window {
*size = maxdim(*size, d);
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_GL_TEMPERATE:
@ -998,16 +998,13 @@ struct GenerateLandscapeWindow : public Window {
void OnTimeout() override
{
static const int newgame_raise_widgets[] = {WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_SNOW_COVERAGE_UP, WID_GL_SNOW_COVERAGE_DOWN, WID_GL_DESERT_COVERAGE_UP, WID_GL_DESERT_COVERAGE_DOWN, WID_GL_SNOW_LEVEL_UP, WID_GL_SNOW_LEVEL_DOWN, WID_GL_RAINFOREST_LEVEL_UP, WID_GL_RAINFOREST_LEVEL_DOWN, WIDGET_LIST_END};
static const int heightmap_raise_widgets[] = {WID_GL_HEIGHTMAP_HEIGHT_DOWN, WID_GL_HEIGHTMAP_HEIGHT_UP, WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_SNOW_COVERAGE_UP, WID_GL_SNOW_COVERAGE_DOWN, WID_GL_DESERT_COVERAGE_UP, WID_GL_DESERT_COVERAGE_DOWN, WID_GL_SNOW_LEVEL_UP, WID_GL_SNOW_LEVEL_DOWN, WID_GL_RAINFOREST_LEVEL_UP, WID_GL_RAINFOREST_LEVEL_DOWN, WIDGET_LIST_END};
const int *widget = (mode == GLWM_HEIGHTMAP) ? heightmap_raise_widgets : newgame_raise_widgets;
for (; *widget != WIDGET_LIST_END; widget++) {
if (this->IsWidgetLowered(*widget)) {
this->RaiseWidget(*widget);
this->SetWidgetDirty(*widget);
}
if (mode == GLWM_HEIGHTMAP) {
this->RaiseWidgetsWhenLowered(WID_GL_HEIGHTMAP_HEIGHT_DOWN, WID_GL_HEIGHTMAP_HEIGHT_UP, WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP,
WID_GL_SNOW_COVERAGE_UP, WID_GL_SNOW_COVERAGE_DOWN, WID_GL_DESERT_COVERAGE_UP, WID_GL_DESERT_COVERAGE_DOWN, WID_GL_SNOW_LEVEL_UP,
WID_GL_SNOW_LEVEL_DOWN, WID_GL_RAINFOREST_LEVEL_UP, WID_GL_RAINFOREST_LEVEL_DOWN);
} else {
this->RaiseWidgetsWhenLowered(WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_SNOW_COVERAGE_UP, WID_GL_SNOW_COVERAGE_DOWN, WID_GL_DESERT_COVERAGE_UP,
WID_GL_DESERT_COVERAGE_DOWN, WID_GL_SNOW_LEVEL_UP, WID_GL_SNOW_LEVEL_DOWN, WID_GL_RAINFOREST_LEVEL_UP, WID_GL_RAINFOREST_LEVEL_DOWN);
}
}
@ -1279,7 +1276,7 @@ struct CreateScenarioWindow : public Window
this->DrawWidgets();
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
StringID str = STR_JUST_INT;
switch (widget) {
@ -1306,7 +1303,7 @@ struct CreateScenarioWindow : public Window
*size = maxdim(*size, d);
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_CS_TEMPERATE:
@ -1375,13 +1372,7 @@ struct CreateScenarioWindow : public Window
void OnTimeout() override
{
static const int raise_widgets[] = {WID_CS_START_DATE_DOWN, WID_CS_START_DATE_UP, WID_CS_FLAT_LAND_HEIGHT_DOWN, WID_CS_FLAT_LAND_HEIGHT_UP, WIDGET_LIST_END};
for (const int *widget = raise_widgets; *widget != WIDGET_LIST_END; widget++) {
if (this->IsWidgetLowered(*widget)) {
this->RaiseWidget(*widget);
this->SetWidgetDirty(*widget);
}
}
this->RaiseWidgetsWhenLowered(WID_CS_START_DATE_DOWN, WID_CS_START_DATE_UP, WID_CS_FLAT_LAND_HEIGHT_DOWN, WID_CS_FLAT_LAND_HEIGHT_UP);
}
void OnDropdownSelect(int widget, int index) override
@ -1530,7 +1521,7 @@ static const StringID _generation_class_table[] = {
static_assert(lengthof(_generation_class_table) == GWP_CLASS_COUNT);
static void AbortGeneratingWorldCallback(Window *w, bool confirmed)
static void AbortGeneratingWorldCallback(Window *, bool confirmed)
{
if (confirmed) {
AbortGeneratingWorld();
@ -1546,7 +1537,7 @@ struct GenerateProgressWindow : public Window {
this->InitNested();
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_GP_ABORT:
@ -1561,7 +1552,7 @@ struct GenerateProgressWindow : public Window {
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_GP_PROGRESS_BAR: {

@ -96,8 +96,9 @@ public:
* @param c The character to add.
* @return The number of buffer spaces that were used.
*/
/* static */ size_t FallbackParagraphLayoutFactory::AppendToBuffer(WChar *buff, const WChar *buffer_last, WChar c)
/* static */ size_t FallbackParagraphLayoutFactory::AppendToBuffer(char32_t *buff, [[maybe_unused]] const char32_t *buffer_last, char32_t c)
{
assert(buff < buffer_last);
*buff = c;
return 1;
}

@ -340,13 +340,11 @@ std::vector<ICURun> ItemizeScript(UChar *buff, size_t length, std::vector<ICURun
*
* Basically, this always returns the same or more runs than given.
*
* @param buff The string to itemize.
* @param length The length of the string.
* @param runs_current The current runs.
* @param font_mapping The font mapping.
* @return The runs.
*/
std::vector<ICURun> ItemizeStyle(UChar *buff, size_t length, std::vector<ICURun> &runs_current, FontMap &font_mapping)
std::vector<ICURun> ItemizeStyle(std::vector<ICURun> &runs_current, FontMap &font_mapping)
{
std::vector<ICURun> runs;
@ -380,7 +378,7 @@ std::vector<ICURun> ItemizeStyle(UChar *buff, size_t length, std::vector<ICURun>
auto runs = ItemizeBidi(buff, length);
runs = ItemizeScript(buff, length, runs);
runs = ItemizeStyle(buff, length, runs, font_mapping);
runs = ItemizeStyle(runs, font_mapping);
if (runs.size() == 0) return nullptr;
@ -524,6 +522,7 @@ std::unique_ptr<const ICUParagraphLayout::Line> ICUParagraphLayout::NextLine(int
/* static */ size_t ICUParagraphLayoutFactory::AppendToBuffer(UChar *buff, const UChar *buffer_last, WChar c)
{
assert(buff < buffer_last);
/* Transform from UTF-32 to internal ICU format of UTF-16. */
int32 length = 0;
UErrorCode err = U_ZERO_ERROR;

@ -63,7 +63,7 @@ struct GoalListWindow : public Window {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_GOAL_GLOBAL_BUTTON:
@ -168,7 +168,7 @@ struct GoalListWindow : public Window {
return num;
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget != WID_GOAL_LIST) return;
Dimension d = GetStringBoundingBox(STR_GOALS_NONE);
@ -269,7 +269,7 @@ struct GoalListWindow : public Window {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
this->vscroll->SetCount(this->CountLines());
@ -370,7 +370,7 @@ struct GoalQuestionWindow : public Window {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_GQ_BUTTON_1:
@ -390,7 +390,7 @@ struct GoalQuestionWindow : public Window {
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget != WID_GQ_QUESTION) return;

@ -79,7 +79,7 @@ struct GraphLegendWindow : Window {
DrawString(tr.left, tr.right, CenterBounds(tr.top, tr.bottom, FONT_HEIGHT_NORMAL), STR_COMPANY_NAME_COMPANY_NUM, HasBit(_legend_excluded_companies, cid) ? TC_BLACK : TC_WHITE);
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
if (!IsInsideMM(widget, WID_GL_FIRST_COMPANY, MAX_COMPANIES + WID_GL_FIRST_COMPANY)) return;
@ -98,7 +98,7 @@ struct GraphLegendWindow : Window {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
if (Company::IsValidID(data)) return;
@ -514,7 +514,7 @@ protected:
}
public:
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget != this->graph_widget) return;
@ -557,12 +557,12 @@ public:
DrawGraph(r);
}
virtual OverflowSafeInt64 GetGraphData(const Company *c, int j)
virtual OverflowSafeInt64 GetGraphData(const Company *, int)
{
return INVALID_DATAPOINT;
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
/* Clicked on legend? */
if (widget == WID_CV_KEY_BUTTON) ShowGraphLegend();
@ -578,7 +578,7 @@ public:
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
this->UpdateStatistics(true);
@ -1061,7 +1061,7 @@ struct PerformanceHistoryGraphWindow : BaseGraphWindow {
return c->old_economy[j].performance_history;
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
if (widget == WID_PHG_DETAILED_PERFORMANCE) ShowPerformanceRatingDetail();
this->BaseGraphWindow::OnClick(pt, widget, click_count);
@ -1267,7 +1267,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget != WID_CPR_MATRIX) {
BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize);
@ -1326,7 +1326,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_CPR_ENABLE_CARGOES:
@ -1386,7 +1386,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
this->SetXAxis();
@ -1533,7 +1533,7 @@ struct PerformanceRatingDetailWindow : Window {
uint score_detail_left;
uint score_detail_right;
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_PRD_SCORE_FIRST:
@ -1670,7 +1670,7 @@ struct PerformanceRatingDetailWindow : Window {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
/* Check which button is clicked */
if (IsInsideMM(widget, WID_PRD_COMPANY_FIRST, WID_PRD_COMPANY_LAST + 1)) {
@ -1698,7 +1698,7 @@ struct PerformanceRatingDetailWindow : Window {
* @param data the company ID of the company that is going to be removed
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
/* Disable the companies who are not active */

@ -424,9 +424,6 @@ public:
this->group_rename = INVALID_GROUP;
this->group_over = INVALID_GROUP;
this->BuildVehicleList();
this->SortVehicleList();
this->groups.ForceRebuild();
this->groups.NeedResort();
this->BuildGroupList(vli.company);
@ -445,6 +442,9 @@ public:
this->FinishInitNested(window_number);
this->owner = vli.company;
this->BuildVehicleList();
this->SortVehicleList();
}
void Close() override
@ -453,7 +453,7 @@ public:
this->Window::Close();
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_GL_LIST_GROUP:
@ -511,7 +511,7 @@ public:
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (data == 0) {
/* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */
@ -593,16 +593,14 @@ public:
this->SetWidgetDisabledState(WID_GL_MANAGE_VEHICLES_DROPDOWN, !this->ShouldShowActionDropdownList() || _local_company != this->vli.company);
this->SetWidgetsDisabledState(this->vehicles.size() == 0 || _local_company != this->vli.company || (IsTopLevelGroupID(this->vli.index) && _settings_client.gui.disable_top_veh_list_mass_actions),
WID_GL_STOP_ALL,
WID_GL_START_ALL,
WIDGET_LIST_END);
WID_GL_START_ALL);
/* Disable the group specific function when we select the default group or all vehicles */
this->SetWidgetsDisabledState(IsDefaultGroupID(this->vli.index) || IsAllGroupID(this->vli.index) || _local_company != this->vli.company,
WID_GL_DELETE_GROUP,
WID_GL_RENAME_GROUP,
WID_GL_LIVERY_GROUP,
WID_GL_REPLACE_PROTECTION,
WIDGET_LIST_END);
WID_GL_REPLACE_PROTECTION);
/* Disable remaining buttons for non-local companies
* Needed while changing _local_company, eg. by cheats
@ -612,8 +610,7 @@ public:
*/
this->SetWidgetsDisabledState(_local_company != this->vli.company,
WID_GL_CREATE_GROUP,
WID_GL_AVAILABLE_VEHICLES,
WIDGET_LIST_END);
WID_GL_AVAILABLE_VEHICLES);
/* If not a default group and the group has replace protection, show an enabled replace sprite. */
uint16 protect_sprite = SPR_GROUP_REPLACE_OFF_TRAIN;
@ -716,7 +713,7 @@ public:
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_GL_SORT_BY_ORDER: // Flip sorting method ascending/descending

@ -129,7 +129,7 @@ struct HelpWindow : public Window {
this->EnableTextfileButton(LICENSE_FILENAME, WID_HW_LICENSE);
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_HW_README:

@ -62,7 +62,7 @@ struct EndGameHighScoreBaseWindow : Window {
return pt;
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, [[maybe_unused]] int widget, [[maybe_unused]] int click_count) override
{
this->Close();
}

@ -206,7 +206,7 @@ Industry::~Industry()
* Invalidating some stuff after removing item from the pool.
* @param index index of deleted item
*/
void Industry::PostDestructor(size_t index)
void Industry::PostDestructor(size_t)
{
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, IDIWD_FORCE_REBUILD);
SetWindowDirty(WC_BUILD_INDUSTRY, 0);
@ -385,7 +385,7 @@ static void DrawTile_Industry(TileInfo *ti, DrawTileProcParams params)
}
}
static int GetSlopePixelZ_Industry(TileIndex tile, uint x, uint y, bool ground_vehicle)
static int GetSlopePixelZ_Industry(TileIndex tile, uint, uint, bool)
{
return GetTileMaxPixelZ(tile);
}
@ -993,7 +993,7 @@ static bool ClickTile_Industry(TileIndex tile)
return true;
}
static TrackStatus GetTileTrackStatus_Industry(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
static TrackStatus GetTileTrackStatus_Industry(TileIndex, TransportType, uint, DiagDirection)
{
return 0;
}
@ -1140,10 +1140,9 @@ void PlantRandomFarmField(const Industry *i)
/**
* Search callback function for ChopLumberMillTrees
* @param tile to test
* @param user_data that is passed by the caller. In this case, nothing
* @return the result of the test
*/
static bool SearchLumberMillTrees(TileIndex tile, void *user_data)
static bool SearchLumberMillTrees(TileIndex tile, void *)
{
if (IsTileType(tile, MP_TREES) && GetTreeGrowth(tile) > 2) { ///< 3 and up means all fully grown trees
/* found a tree */
@ -1168,6 +1167,9 @@ static bool SearchLumberMillTrees(TileIndex tile, void *user_data)
*/
static void ChopLumberMillTrees(Industry *i)
{
/* Skip production if cargo slot is invalid. */
if (i->produced_cargo[0] == CT_INVALID) return;
/* We only want to cut trees if all tiles are completed. */
for (TileIndex tile_cur : i->location) {
if (i->TileBelongsToIndustry(tile_cur)) {
@ -1184,6 +1186,7 @@ static void ChopLumberMillTrees(Industry *i)
static void ProduceIndustryGoodsFromRate(Industry *i, bool scale)
{
for (size_t j = 0; j < lengthof(i->produced_cargo_waiting); j++) {
if (i->produced_cargo[j] == CT_INVALID) continue;
uint amount = i->production_rate[j];
if (amount != 0 && scale) {
amount = ScaleQuantity(amount, _settings_game.economy.industry_cargo_scale_factor);
@ -1291,10 +1294,9 @@ void OnTick_Industry()
/**
* Check the conditions of #CHECK_NOTHING (Always succeeds).
* @param tile %Tile to perform the checking.
* @return Succeeded or failed command.
*/
static CommandCost CheckNewIndustry_NULL(TileIndex tile)
static CommandCost CheckNewIndustry_NULL(TileIndex)
{
return CommandCost();
}
@ -1660,7 +1662,7 @@ static bool CheckCanTerraformSurroundingTiles(TileIndex tile, uint height, int i
* This function tries to flatten out the land below an industry, without
* damaging the surroundings too much.
*/
static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, DoCommandFlag flags, const IndustryTileLayout &layout, int type)
static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, DoCommandFlag flags, const IndustryTileLayout &layout)
{
int max_x = 0;
int max_y = 0;
@ -2074,7 +2076,7 @@ static CommandCost CreateNewIndustryHelper(TileIndex tile, IndustryType type, Do
if (ret.Failed()) return ret;
if (!custom_shape_check && _settings_game.game_creation.land_generator == LG_TERRAGENESIS && _generating_world &&
!_ignore_restrictions && !CheckIfCanLevelIndustryPlatform(tile, DC_NO_WATER, layout, type)) {
!_ignore_restrictions && !CheckIfCanLevelIndustryPlatform(tile, DC_NO_WATER, layout)) {
return_cmd_error(STR_ERROR_SITE_UNSUITABLE);
}
@ -2082,7 +2084,7 @@ static CommandCost CreateNewIndustryHelper(TileIndex tile, IndustryType type, Do
if (flags & DC_EXEC) {
*ip = new Industry(tile);
if (!custom_shape_check) CheckIfCanLevelIndustryPlatform(tile, DC_NO_WATER | DC_EXEC, layout, type);
if (!custom_shape_check) CheckIfCanLevelIndustryPlatform(tile, DC_NO_WATER | DC_EXEC, layout);
DoCreateNewIndustry(*ip, tile, type, layout, layout_index, t, founder, random_initial_bits);
}

@ -430,7 +430,7 @@ public:
this->SetupArrays();
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_DPI_MATRIX_WIDGET: {
@ -603,7 +603,7 @@ public:
}
}
static void AskManyRandomIndustriesCallback(Window *w, bool confirmed)
static void AskManyRandomIndustriesCallback(Window *, bool confirmed)
{
if (!confirmed) return;
@ -618,7 +618,7 @@ public:
}
}
static void AskRemoveAllIndustriesCallback(Window *w, bool confirmed)
static void AskRemoveAllIndustriesCallback(Window *, bool confirmed)
{
if (!confirmed) return;
@ -634,7 +634,7 @@ public:
MarkWholeScreenDirty();
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_DPI_CREATE_RANDOM_INDUSTRIES_WIDGET: {
@ -698,7 +698,7 @@ public:
this->vscroll->SetCapacityFromWidget(this, WID_DPI_MATRIX_WIDGET);
}
void OnPlaceObject(Point pt, TileIndex tile) override
void OnPlaceObject([[maybe_unused]] Point pt, TileIndex tile) override
{
bool success = true;
/* We do not need to protect ourselves against "Random Many Industries" in this mode */
@ -760,7 +760,7 @@ public:
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
this->SetupArrays();
@ -992,12 +992,12 @@ public:
if (widget == WID_IV_CAPTION) SetDParam(0, this->window_number);
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget == WID_IV_INFO) size->height = this->info_height;
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_IV_INFO: {
@ -1145,7 +1145,7 @@ public:
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
const Industry *i = Industry::Get(this->window_number);
@ -1622,7 +1622,7 @@ protected:
}
public:
IndustryDirectoryWindow(WindowDesc *desc, WindowNumber number) : Window(desc), industry_editbox(MAX_FILTER_LENGTH * MAX_CHAR_LENGTH, MAX_FILTER_LENGTH)
IndustryDirectoryWindow(WindowDesc *desc, WindowNumber) : Window(desc), industry_editbox(MAX_FILTER_LENGTH * MAX_CHAR_LENGTH, MAX_FILTER_LENGTH)
{
this->CreateNestedTree();
this->vscroll = this->GetScrollbar(WID_ID_SCROLLBAR);
@ -1630,10 +1630,11 @@ public:
this->industries.SetListing(this->last_sorting);
this->industries.SetSortFuncs(IndustryDirectoryWindow::sorter_funcs);
this->industries.ForceRebuild();
this->BuildSortIndustriesList();
this->FinishInitNested(0);
this->BuildSortIndustriesList();
this->querystrings[WID_ID_FILTER] = &this->industry_editbox;
this->industry_editbox.cancel_button = QueryString::ACTION_CLEAR;
}
@ -1700,7 +1701,7 @@ public:
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_ID_DROPDOWN_ORDER: {
@ -1738,7 +1739,7 @@ public:
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_ID_DROPDOWN_ORDER:
@ -1827,7 +1828,7 @@ public:
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
switch (data) {
case IDIWD_FORCE_REBUILD:
@ -1931,6 +1932,11 @@ enum CargoesFieldType {
static const uint MAX_CARGOES = 16; ///< Maximum number of cargoes carried in a #CFT_CARGO field in #CargoesField.
static bool CargoIDSorter(const CargoID &a, const CargoID &b)
{
return _sorted_cargo_types[a] < _sorted_cargo_types[b];
}
/** Data about a single field in the #IndustryCargoesWindow panel. */
struct CargoesField {
static int vert_inter_industry_space;
@ -1958,15 +1964,15 @@ struct CargoesField {
CargoID other_accepted[MAX_CARGOES]; ///< Cargoes accepted but not used in this figure.
} industry; ///< Industry data (for #CFT_INDUSTRY).
struct {
CargoID vertical_cargoes[MAX_CARGOES]; ///< Cargoes running from top to bottom (cargo ID or #INVALID_CARGO).
byte num_cargoes; ///< Number of cargoes.
CargoID supp_cargoes[MAX_CARGOES]; ///< Cargoes entering from the left (index in #vertical_cargoes, or #INVALID_CARGO).
byte top_end; ///< Stop at the top of the vertical cargoes.
CargoID cust_cargoes[MAX_CARGOES]; ///< Cargoes leaving to the right (index in #vertical_cargoes, or #INVALID_CARGO).
byte bottom_end; ///< Stop at the bottom of the vertical cargoes.
CargoID vertical_cargoes[MAX_CARGOES]; ///< Cargoes running from top to bottom (cargo ID or #CT_INVALID).
uint8_t num_cargoes; ///< Number of cargoes.
CargoID supp_cargoes[MAX_CARGOES]; ///< Cargoes entering from the left (index in #vertical_cargoes, or #CT_INVALID).
uint8_t top_end; ///< Stop at the top of the vertical cargoes.
CargoID cust_cargoes[MAX_CARGOES]; ///< Cargoes leaving to the right (index in #vertical_cargoes, or #CT_INVALID).
uint8_t bottom_end; ///< Stop at the bottom of the vertical cargoes.
} cargo; ///< Cargo data (for #CFT_CARGO).
struct {
CargoID cargoes[MAX_CARGOES]; ///< Cargoes to display (or #INVALID_CARGO).
CargoID cargoes[MAX_CARGOES]; ///< Cargoes to display (or #CT_INVALID).
bool left_align; ///< Align all cargo texts to the left (else align to the right).
} cargo_label; ///< Label data (for #CFT_CARGO_LABEL).
StringID header; ///< Header text (for #CFT_HEADER).
@ -1990,8 +1996,8 @@ struct CargoesField {
{
this->type = CFT_INDUSTRY;
this->u.industry.ind_type = ind_type;
MemSetT(this->u.industry.other_accepted, INVALID_CARGO, MAX_CARGOES);
MemSetT(this->u.industry.other_produced, INVALID_CARGO, MAX_CARGOES);
std::fill(std::begin(this->u.industry.other_accepted), std::end(this->u.industry.other_accepted), CT_INVALID);
std::fill(std::begin(this->u.industry.other_produced), std::end(this->u.industry.other_produced), CT_INVALID);
}
/**
@ -2003,7 +2009,7 @@ struct CargoesField {
int ConnectCargo(CargoID cargo, bool producer)
{
assert(this->type == CFT_CARGO);
if (cargo == INVALID_CARGO) return -1;
if (cargo == CT_INVALID) return -1;
/* Find the vertical cargo column carrying the cargo. */
int column = -1;
@ -2016,10 +2022,10 @@ struct CargoesField {
if (column < 0) return -1;
if (producer) {
assert(this->u.cargo.supp_cargoes[column] == INVALID_CARGO);
assert(this->u.cargo.supp_cargoes[column] == CT_INVALID);
this->u.cargo.supp_cargoes[column] = column;
} else {
assert(this->u.cargo.cust_cargoes[column] == INVALID_CARGO);
assert(this->u.cargo.cust_cargoes[column] == CT_INVALID);
this->u.cargo.cust_cargoes[column] = column;
}
return column;
@ -2034,15 +2040,15 @@ struct CargoesField {
assert(this->type == CFT_CARGO);
for (uint i = 0; i < MAX_CARGOES; i++) {
if (this->u.cargo.supp_cargoes[i] != INVALID_CARGO) return true;
if (this->u.cargo.cust_cargoes[i] != INVALID_CARGO) return true;
if (this->u.cargo.supp_cargoes[i] != CT_INVALID) return true;
if (this->u.cargo.cust_cargoes[i] != CT_INVALID) return true;
}
return false;
}
/**
* Make a piece of cargo column.
* @param cargoes Array of #CargoID (may contain #INVALID_CARGO).
* @param cargoes Array of #CargoID (may contain #CT_INVALID).
* @param length Number of cargoes in \a cargoes.
* @param count Number of cargoes to display (should be at least the number of valid cargoes, or \c -1 to let the method compute it).
* @param top_end This is the first cargo field of this column.
@ -2052,25 +2058,25 @@ struct CargoesField {
void MakeCargo(const CargoID *cargoes, uint length, int count = -1, bool top_end = false, bool bottom_end = false)
{
this->type = CFT_CARGO;
uint i;
uint num = 0;
for (i = 0; i < MAX_CARGOES && i < length; i++) {
if (cargoes[i] != INVALID_CARGO) {
this->u.cargo.vertical_cargoes[num] = cargoes[i];
num++;
auto insert = std::begin(this->u.cargo.vertical_cargoes);
for (uint i = 0; insert != std::end(this->u.cargo.vertical_cargoes) && i < length; i++) {
if (cargoes[i] != CT_INVALID) {
*insert = cargoes[i];
++insert;
}
}
this->u.cargo.num_cargoes = (count < 0) ? num : count;
for (; num < MAX_CARGOES; num++) this->u.cargo.vertical_cargoes[num] = INVALID_CARGO;
this->u.cargo.num_cargoes = (count < 0) ? static_cast<uint8_t>(insert - std::begin(this->u.cargo.vertical_cargoes)) : count;
std::sort(std::begin(this->u.cargo.vertical_cargoes), insert, &CargoIDSorter);
std::fill(insert, std::end(this->u.cargo.vertical_cargoes), CT_INVALID);
this->u.cargo.top_end = top_end;
this->u.cargo.bottom_end = bottom_end;
MemSetT(this->u.cargo.supp_cargoes, INVALID_CARGO, MAX_CARGOES);
MemSetT(this->u.cargo.cust_cargoes, INVALID_CARGO, MAX_CARGOES);
std::fill(std::begin(this->u.cargo.supp_cargoes), std::end(this->u.cargo.supp_cargoes), CT_INVALID);
std::fill(std::begin(this->u.cargo.cust_cargoes), std::end(this->u.cargo.cust_cargoes), CT_INVALID);
}
/**
* Make a field displaying cargo type names.
* @param cargoes Array of #CargoID (may contain #INVALID_CARGO).
* @param cargoes Array of #CargoID (may contain #CT_INVALID).
* @param length Number of cargoes in \a cargoes.
* @param left_align ALign texts to the left (else to the right).
*/
@ -2079,7 +2085,7 @@ struct CargoesField {
this->type = CFT_CARGO_LABEL;
uint i;
for (i = 0; i < MAX_CARGOES && i < length; i++) this->u.cargo_label.cargoes[i] = cargoes[i];
for (; i < MAX_CARGOES; i++) this->u.cargo_label.cargoes[i] = INVALID_CARGO;
for (; i < MAX_CARGOES; i++) this->u.cargo_label.cargoes[i] = CT_INVALID;
this->u.cargo_label.left_align = left_align;
}
@ -2162,13 +2168,13 @@ struct CargoesField {
}
ypos1 += CargoesField::cargo_border.height + (FONT_HEIGHT_NORMAL - CargoesField::cargo_line.height) / 2;
for (uint i = 0; i < CargoesField::max_cargoes; i++) {
if (other_right[i] != INVALID_CARGO) {
if (other_right[i] != CT_INVALID) {
const CargoSpec *csp = CargoSpec::Get(other_right[i]);
int xp = xpos + industry_width + CargoesField::cargo_stub.width;
DrawHorConnection(xpos + industry_width, xp - 1, ypos1, csp);
GfxDrawLine(xp, ypos1, xp, ypos1 + CargoesField::cargo_line.height - 1, CARGO_LINE_COLOUR);
}
if (other_left[i] != INVALID_CARGO) {
if (other_left[i] != CT_INVALID) {
const CargoSpec *csp = CargoSpec::Get(other_left[i]);
int xp = xpos - CargoesField::cargo_stub.width;
DrawHorConnection(xp + 1, xpos - 1, ypos1, csp);
@ -2206,7 +2212,7 @@ struct CargoesField {
}
ypos += CargoesField::cargo_border.height + vert_inter_industry_space / 2 + (FONT_HEIGHT_NORMAL - CargoesField::cargo_line.height) / 2;
for (uint i = 0; i < MAX_CARGOES; i++) {
if (hor_left[i] != INVALID_CARGO) {
if (hor_left[i] != CT_INVALID) {
int col = hor_left[i];
int dx = 0;
const CargoSpec *csp = CargoSpec::Get(this->u.cargo.vertical_cargoes[col]);
@ -2217,7 +2223,7 @@ struct CargoesField {
}
DrawHorConnection(xpos, cargo_base - dx, ypos, csp);
}
if (hor_right[i] != INVALID_CARGO) {
if (hor_right[i] != CT_INVALID) {
int col = hor_right[i];
int dx = 0;
const CargoSpec *csp = CargoSpec::Get(this->u.cargo.vertical_cargoes[col]);
@ -2236,7 +2242,7 @@ struct CargoesField {
case CFT_CARGO_LABEL:
ypos += CargoesField::cargo_border.height + vert_inter_industry_space / 2;
for (uint i = 0; i < MAX_CARGOES; i++) {
if (this->u.cargo_label.cargoes[i] != INVALID_CARGO) {
if (this->u.cargo_label.cargoes[i] != CT_INVALID) {
const CargoSpec *csp = CargoSpec::Get(this->u.cargo_label.cargoes[i]);
DrawString(xpos + WidgetDimensions::scaled.framerect.left, xpos + industry_width - 1 - WidgetDimensions::scaled.framerect.right, ypos, csp->name, TC_WHITE,
(this->u.cargo_label.left_align) ? SA_LEFT : SA_RIGHT);
@ -2255,7 +2261,7 @@ struct CargoesField {
* @param left Left industry neighbour if available (else \c nullptr should be supplied).
* @param right Right industry neighbour if available (else \c nullptr should be supplied).
* @param pt Click position in the cargo field.
* @return Cargo clicked at, or #INVALID_CARGO if none.
* @return Cargo clicked at, or #CT_INVALID if none.
*/
CargoID CargoClickedAt(const CargoesField *left, const CargoesField *right, Point pt) const
{
@ -2274,45 +2280,50 @@ struct CargoesField {
int vpos = vert_inter_industry_space / 2 + CargoesField::cargo_border.width;
uint row;
for (row = 0; row < MAX_CARGOES; row++) {
if (pt.y < vpos) return INVALID_CARGO;
if (pt.y < vpos) return CT_INVALID;
if (pt.y < vpos + FONT_HEIGHT_NORMAL) break;
vpos += FONT_HEIGHT_NORMAL + CargoesField::cargo_space.width;
}
if (row == MAX_CARGOES) return INVALID_CARGO;
if (row == MAX_CARGOES) return CT_INVALID;
/* row = 0 -> at first horizontal row, row = 1 -> second horizontal row, 2 = 3rd horizontal row. */
if (col == 0) {
if (this->u.cargo.supp_cargoes[row] != INVALID_CARGO) return this->u.cargo.vertical_cargoes[this->u.cargo.supp_cargoes[row]];
if (this->u.cargo.supp_cargoes[row] != CT_INVALID) return this->u.cargo.vertical_cargoes[this->u.cargo.supp_cargoes[row]];
if (left != nullptr) {
if (left->type == CFT_INDUSTRY) return left->u.industry.other_produced[row];
if (left->type == CFT_CARGO_LABEL && !left->u.cargo_label.left_align) return left->u.cargo_label.cargoes[row];
}
return INVALID_CARGO;
return CT_INVALID;
}
if (col == this->u.cargo.num_cargoes) {
if (this->u.cargo.cust_cargoes[row] != INVALID_CARGO) return this->u.cargo.vertical_cargoes[this->u.cargo.cust_cargoes[row]];
if (this->u.cargo.cust_cargoes[row] != CT_INVALID) return this->u.cargo.vertical_cargoes[this->u.cargo.cust_cargoes[row]];
if (right != nullptr) {
if (right->type == CFT_INDUSTRY) return right->u.industry.other_accepted[row];
if (right->type == CFT_CARGO_LABEL && right->u.cargo_label.left_align) return right->u.cargo_label.cargoes[row];
}
return INVALID_CARGO;
return CT_INVALID;
}
if (row >= col) {
/* Clicked somewhere in-between vertical cargo connection.
* Since the horizontal connection is made in the same order as the vertical list, the above condition
* ensures we are left-below the main diagonal, thus at the supplying side.
*/
return (this->u.cargo.supp_cargoes[row] != INVALID_CARGO) ? this->u.cargo.vertical_cargoes[this->u.cargo.supp_cargoes[row]] : INVALID_CARGO;
if (this->u.cargo.supp_cargoes[row] == CT_INVALID) return CT_INVALID;
return this->u.cargo.vertical_cargoes[this->u.cargo.supp_cargoes[row]];
} else {
/* Clicked at a customer connection. */
return (this->u.cargo.cust_cargoes[row] != INVALID_CARGO) ? this->u.cargo.vertical_cargoes[this->u.cargo.cust_cargoes[row]] : INVALID_CARGO;
if (this->u.cargo.cust_cargoes[row] == CT_INVALID) return CT_INVALID;
return this->u.cargo.vertical_cargoes[this->u.cargo.cust_cargoes[row]];
}
/* Clicked at a customer connection. */
if (IsValidCargoID(this->u.cargo.cust_cargoes[row])) return this->u.cargo.vertical_cargoes[this->u.cargo.cust_cargoes[row]];
return CT_INVALID;
}
/**
* Decide what cargo the user clicked in the cargo label field.
* @param pt Click position in the cargo label field.
* @return Cargo clicked at, or #INVALID_CARGO if none.
* @return Cargo clicked at, or #CT_INVALID if none.
*/
CargoID CargoLabelClickedAt(Point pt) const
{
@ -2321,11 +2332,11 @@ struct CargoesField {
int vpos = vert_inter_industry_space / 2 + CargoesField::cargo_border.height;
uint row;
for (row = 0; row < MAX_CARGOES; row++) {
if (pt.y < vpos) return INVALID_CARGO;
if (pt.y < vpos) return CT_INVALID;
if (pt.y < vpos + FONT_HEIGHT_NORMAL) break;
vpos += FONT_HEIGHT_NORMAL + CargoesField::cargo_space.height;
}
if (row == MAX_CARGOES) return INVALID_CARGO;
if (row == MAX_CARGOES) return CT_INVALID;
return this->u.cargo_label.cargoes[row];
}
@ -2380,7 +2391,7 @@ struct CargoesRow {
CargoesField *cargo_fld = this->columns + column + 1;
assert(ind_fld->type == CFT_INDUSTRY && cargo_fld->type == CFT_CARGO);
MemSetT(ind_fld->u.industry.other_produced, INVALID_CARGO, MAX_CARGOES);
std::fill(std::begin(ind_fld->u.industry.other_produced), std::end(ind_fld->u.industry.other_produced), CT_INVALID);
if (ind_fld->u.industry.ind_type < NUM_INDUSTRYTYPES) {
CargoID others[MAX_CARGOES]; // Produced cargoes not carried in the cargo column.
@ -2395,7 +2406,7 @@ struct CargoesRow {
/* Allocate other cargoes in the empty holes of the horizontal cargo connections. */
for (uint i = 0; i < CargoesField::max_cargoes && other_count > 0; i++) {
if (cargo_fld->u.cargo.supp_cargoes[i] == INVALID_CARGO) ind_fld->u.industry.other_produced[i] = others[--other_count];
if (cargo_fld->u.cargo.supp_cargoes[i] == CT_INVALID) ind_fld->u.industry.other_produced[i] = others[--other_count];
}
} else {
/* Houses only display what is demanded. */
@ -2414,7 +2425,7 @@ struct CargoesRow {
void MakeCargoLabel(int column, bool accepting)
{
CargoID cargoes[MAX_CARGOES];
MemSetT(cargoes, INVALID_CARGO, lengthof(cargoes));
std::fill(std::begin(cargoes), std::end(cargoes), CT_INVALID);
CargoesField *label_fld = this->columns + column;
CargoesField *cargo_fld = this->columns + (accepting ? column - 1 : column + 1);
@ -2438,7 +2449,7 @@ struct CargoesRow {
CargoesField *cargo_fld = this->columns + column - 1;
assert(ind_fld->type == CFT_INDUSTRY && cargo_fld->type == CFT_CARGO);
MemSetT(ind_fld->u.industry.other_accepted, INVALID_CARGO, MAX_CARGOES);
std::fill(std::begin(ind_fld->u.industry.other_accepted), std::end(ind_fld->u.industry.other_accepted), CT_INVALID);
if (ind_fld->u.industry.ind_type < NUM_INDUSTRYTYPES) {
CargoID others[MAX_CARGOES]; // Accepted cargoes not carried in the cargo column.
@ -2453,7 +2464,7 @@ struct CargoesRow {
/* Allocate other cargoes in the empty holes of the horizontal cargo connections. */
for (uint i = 0; i < CargoesField::max_cargoes && other_count > 0; i++) {
if (cargo_fld->u.cargo.cust_cargoes[i] == INVALID_CARGO) ind_fld->u.industry.other_accepted[i] = others[--other_count];
if (cargo_fld->u.cargo.cust_cargoes[i] == CT_INVALID) ind_fld->u.industry.other_accepted[i] = others[--other_count];
}
} else {
/* Houses only display what is demanded. */
@ -2591,7 +2602,7 @@ struct IndustryCargoesWindow : public Window {
CargoesField::cargo_field_width = CargoesField::cargo_border.width * 2 + CargoesField::cargo_line.width * CargoesField::max_cargoes + CargoesField::cargo_space.width * (CargoesField::max_cargoes - 1);
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_IC_PANEL:
@ -2636,7 +2647,7 @@ struct IndustryCargoesWindow : public Window {
static bool HasCommonValidCargo(const CargoID *cargoes1, uint length1, const CargoID *cargoes2, uint length2)
{
while (length1 > 0) {
if (*cargoes1 != INVALID_CARGO) {
if (*cargoes1 != CT_INVALID) {
for (uint i = 0; i < length2; i++) if (*cargoes1 == cargoes2[i]) return true;
}
cargoes1++;
@ -2654,7 +2665,7 @@ struct IndustryCargoesWindow : public Window {
static bool HousesCanSupply(const CargoID *cargoes, uint length)
{
for (uint i = 0; i < length; i++) {
if (cargoes[i] == INVALID_CARGO) continue;
if (cargoes[i] == CT_INVALID) continue;
if (cargoes[i] == CT_PASSENGERS || cargoes[i] == CT_MAIL) return true;
}
return false;
@ -2677,7 +2688,7 @@ struct IndustryCargoesWindow : public Window {
default: NOT_REACHED();
}
for (uint i = 0; i < length; i++) {
if (cargoes[i] == INVALID_CARGO) continue;
if (cargoes[i] == CT_INVALID) continue;
for (uint h = 0; h < NUM_HOUSES; h++) {
HouseSpec *hs = HouseSpec::Get(h);
@ -2826,7 +2837,7 @@ struct IndustryCargoesWindow : public Window {
/* Add suppliers and customers of the 'it' industry. */
int supp_count = 0;
int cust_count = 0;
for (IndustryType it = 0; it < NUM_INDUSTRYTYPES; it++) {
for (IndustryType it : _sorted_industry_types) {
const IndustrySpec *indsp = GetIndustrySpec(it);
if (!indsp->enabled) continue;
@ -2898,7 +2909,7 @@ struct IndustryCargoesWindow : public Window {
/* Add suppliers and customers of the cargo. */
int supp_count = 0;
int cust_count = 0;
for (IndustryType it = 0; it < NUM_INDUSTRYTYPES; it++) {
for (IndustryType it : _sorted_industry_types) {
const IndustrySpec *indsp = GetIndustrySpec(it);
if (!indsp->enabled) continue;
@ -2937,14 +2948,11 @@ struct IndustryCargoesWindow : public Window {
* - data = NUM_INDUSTRYTYPES: Stop sending updates to the smallmap window.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
if (data == NUM_INDUSTRYTYPES) {
if (this->IsWidgetLowered(WID_IC_NOTIFY)) {
this->RaiseWidget(WID_IC_NOTIFY);
this->SetWidgetDirty(WID_IC_NOTIFY);
}
this->RaiseWidgetWhenLowered(WID_IC_NOTIFY);
return;
}
@ -3037,7 +3045,7 @@ struct IndustryCargoesWindow : public Window {
return true;
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
switch (widget) {
case WID_IC_PANEL: {
@ -3054,13 +3062,13 @@ struct IndustryCargoesWindow : public Window {
CargoesField *lft = (fieldxy.x > 0) ? this->fields[fieldxy.y].columns + fieldxy.x - 1 : nullptr;
CargoesField *rgt = (fieldxy.x < 4) ? this->fields[fieldxy.y].columns + fieldxy.x + 1 : nullptr;
CargoID cid = fld->CargoClickedAt(lft, rgt, xy);
if (cid != INVALID_CARGO) this->ComputeCargoDisplay(cid);
if (cid != CT_INVALID) this->ComputeCargoDisplay(cid);
break;
}
case CFT_CARGO_LABEL: {
CargoID cid = fld->CargoLabelClickedAt(xy);
if (cid != INVALID_CARGO) this->ComputeCargoDisplay(cid);
if (cid != CT_INVALID) this->ComputeCargoDisplay(cid);
break;
}
@ -3147,7 +3155,7 @@ struct IndustryCargoesWindow : public Window {
}
}
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override
bool OnTooltip([[maybe_unused]] Point pt, int widget, TooltipCloseCondition close_cond) override
{
if (widget != WID_IC_PANEL) return false;
@ -3155,7 +3163,7 @@ struct IndustryCargoesWindow : public Window {
if (!CalculatePositionInWidget(pt, &fieldxy, &xy)) return false;
const CargoesField *fld = this->fields[fieldxy.y].columns + fieldxy.x;
CargoID cid = INVALID_CARGO;
CargoID cid = CT_INVALID;
switch (fld->type) {
case CFT_CARGO: {
CargoesField *lft = (fieldxy.x > 0) ? this->fields[fieldxy.y].columns + fieldxy.x - 1 : nullptr;
@ -3178,7 +3186,7 @@ struct IndustryCargoesWindow : public Window {
default:
break;
}
if (cid != INVALID_CARGO && (this->ind_cargo < NUM_INDUSTRYTYPES || cid != this->ind_cargo - NUM_INDUSTRYTYPES)) {
if (cid != CT_INVALID && (this->ind_cargo < NUM_INDUSTRYTYPES || cid != this->ind_cargo - NUM_INDUSTRYTYPES)) {
const CargoSpec *csp = CargoSpec::Get(cid);
SetDParam(0, csp->name);
GuiShowTooltips(this, STR_INDUSTRY_CARGOES_CARGO_TOOLTIP, close_cond, 1);

@ -92,8 +92,8 @@ struct IniFile : IniLoadFile {
bool SaveToDisk(const std::string &filename);
virtual FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size);
virtual void ReportFileError(const char * const pre, const char * const buffer, const char * const post);
FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) override;
void ReportFileError(const char * const pre, const char * const buffer, const char * const post) override;
};
#endif /* INI_TYPE_H */

@ -190,7 +190,7 @@ struct SelectGameWindow : public Window {
this->mouse_idle_pos = _cursor.pos;
}
void OnRealtimeTick(uint delta_ms) override
void OnRealtimeTick([[maybe_unused]] uint delta_ms) override
{
/* Move the main game viewport according to intro viewport commands. */
@ -265,7 +265,7 @@ struct SelectGameWindow : public Window {
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
this->SetWidgetLoweredState(WID_SGI_TEMPERATE_LANDSCAPE, _settings_newgame.game_creation.landscape == LT_TEMPERATE);
@ -298,7 +298,7 @@ struct SelectGameWindow : public Window {
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
StringID str = 0;
switch (widget) {
@ -327,7 +327,7 @@ struct SelectGameWindow : public Window {
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
/* Do not create a network server when you (just) have closed one of the game
* creation/load windows for the network server. */
@ -508,7 +508,7 @@ void ShowSelectGameWindow()
new SelectGameWindow(&_select_game_desc);
}
static void AskExitGameCallback(Window *w, bool confirmed)
static void AskExitGameCallback(Window *, bool confirmed)
{
if (confirmed) {
_survey.Transmit(NetworkSurveyHandler::Reason::EXIT, true);
@ -528,7 +528,7 @@ void AskExitGame()
}
static void AskExitToGameMenuCallback(Window *w, bool confirmed)
static void AskExitToGameMenuCallback(Window *, bool confirmed)
{
if (confirmed) {
_switch_mode = SM_MENU;

@ -1035,10 +1035,9 @@ static void CreateDesertOrRainForest(uint desert_tropic_line)
/**
* Find the spring of a river.
* @param tile The tile to consider for being the spring.
* @param user_data Ignored data.
* @return True iff it is suitable as a spring.
*/
static bool FindSpring(TileIndex tile, void *user_data)
static bool FindSpring(TileIndex tile, void *)
{
int referenceHeight;
if (!IsTileFlat(tile, &referenceHeight) || IsWaterTile(tile)) return false;

@ -3401,6 +3401,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspecio
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} em {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objeto
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipo de ferrovia
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Variável NewGRF 60+ parâmetro x (hexadecimal)

@ -524,6 +524,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Esborra tots el
# About menu
###length 11
STR_ABOUT_MENU_LAND_BLOCK_INFO :Informació de la casella
STR_ABOUT_MENU_HELP :Ajuda i manuals
STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Commuta la consola
STR_ABOUT_MENU_AI_DEBUG :Depuració de les IA i l'script de partida
@ -1427,6 +1428,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Cap*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduït
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Permet passos a nivell amb carreteres o rails dels competidors: {STRING}
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Permet la construcció de passos a nivell en carreteres o vies ferroviàries que siguin propietat d'altres jugadors.
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permet situar parades en carreteres que són propietat de les poblacions: {STRING}
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Permet la construcció de passos a nivell als carrers propietat de les poblacions
@ -2123,6 +2126,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Multijug
STR_INTRO_GAME_OPTIONS :{BLACK}Opcions del joc
STR_INTRO_HIGHSCORE :{BLACK}Taula de rècords
STR_INTRO_HELP :{BLACK}Ajuda i manuals
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Configuració
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Extensions NewGRF
STR_INTRO_ONLINE_CONTENT :{BLACK}Contingut en línia
@ -2144,6 +2148,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Seleccio
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Mostra les opcions del joc
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Mostra la taula de rècords
STR_INTRO_TOOLTIP_HELP :{BLACK}Accediu a la documentació i recursos en línia.
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Mostra la finestra de configuració
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Mostra la configuració de les extensions NewGRF
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Comprova si hi ha continguts nous i actualitzats per a descarregar
@ -2166,6 +2171,17 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Esteu s
STR_ABANDON_SCENARIO_QUERY :{YELLOW}Esteu segur que voleu sortir de l'escenari?
# Help window
STR_HELP_WINDOW_CAPTION :{WHITE}Ajuda i manuals
STR_HELP_WINDOW_WEBSITES :{BLACK}Llocs web
STR_HELP_WINDOW_DOCUMENTS :{BLACK}Documents
STR_HELP_WINDOW_README :{BLACK}Llegeix-me
STR_HELP_WINDOW_CHANGELOG :{BLACK}Registre de canvis
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Errors coneguts
STR_HELP_WINDOW_LICENSE :{BLACK}Llicència
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Manual / Wiki
STR_HELP_WINDOW_BUGTRACKER :{BLACK}Informeu d'un error
STR_HELP_WINDOW_COMMUNITY :Comunitat
# Cheat window
STR_CHEATS :{WHITE}Trampes
@ -3385,6 +3401,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspecci
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} a {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objecte
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipus de via
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipus de carretera
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paràmetre NewGRF variable 60+x (hexadecimal)
@ -4700,6 +4717,11 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
# Textfile window
STR_TEXTFILE_JUMPLIST :{WHITE}Taula de continguts
STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Salteu a una secció del fitxer que es mostra amb aquesta llista.
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Torneu enrere segons l'historial de navegació.
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Aneu avant segons l'historial de navegació.
STR_TEXTFILE_WRAP_TEXT :{WHITE}Ajusta text
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ajusta el text afegint-hi canvis de línia, de manera que sigui més fàcil desplaçar-se pel text
STR_TEXTFILE_VIEW_README :{BLACK}Veure llegeix-me
@ -4710,6 +4732,7 @@ STR_TEXTFILE_README_CAPTION :{WHITE}Llegeix-
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Registre de canvis del {STRING} de {STRING}
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Llicència del {STRING} de {STRING}
STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Vista prèvia del resultat del sondeig
STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}Document '{STRING}' de l'OpenTTD
# Vehicle loading indicators

@ -523,6 +523,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Slet alle beske
# About menu
###length 11
STR_ABOUT_MENU_LAND_BLOCK_INFO :Landområde information
STR_ABOUT_MENU_HELP :Hjælp & manualer
STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Tænd/Sluk konsol
STR_ABOUT_MENU_AI_DEBUG :Computerspiller/spilscript debug
@ -2124,6 +2125,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Netværk
STR_INTRO_GAME_OPTIONS :{BLACK}Opsætning
STR_INTRO_HIGHSCORE :{BLACK} Topresultater
STR_INTRO_HELP :{BLACK}Hjælp og manualer
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Indstillinger
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF indstillinger
STR_INTRO_ONLINE_CONTENT :{BLACK}Tjek Online Indhold
@ -2145,6 +2147,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vælg 'l
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Sæt spillet op
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Hvis topscoreliste
STR_INTRO_TOOLTIP_HELP :{BLACK}Få adgang til dokumentation og online ressourcer
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Skærm indstillinger
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Vis NewGRF-indstillinger
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Tjek for nyt og opdateret indhold til download
@ -2167,6 +2170,17 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Er du s
STR_ABANDON_SCENARIO_QUERY :{YELLOW}Er du sikker på, at du vil afslutte dette scenarie ?
# Help window
STR_HELP_WINDOW_CAPTION :{WHITE}Hjælp og manualer
STR_HELP_WINDOW_WEBSITES :{BLACK}Hjemmesider
STR_HELP_WINDOW_DOCUMENTS :{BLACK}Dokumenter
STR_HELP_WINDOW_README :{BLACK}Læs mig
STR_HELP_WINDOW_CHANGELOG :{BLACK}Ændringslog
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Kendte Bugs
STR_HELP_WINDOW_LICENSE :{BLACK}Licens
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Manual / Wiki
STR_HELP_WINDOW_BUGTRACKER :{BLACK}Anmeld en fejl
STR_HELP_WINDOW_COMMUNITY :{BLACK}Fællesskab
# Cheat window
STR_CHEATS :{WHITE}Snydefunktioner
@ -3386,6 +3400,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspicer
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} ved {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objekt
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Jernbanetype
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vej type
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal)
@ -4701,6 +4716,11 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
# Textfile window
STR_TEXTFILE_JUMPLIST :{WHITE}Indholdsfortegnelse
STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Spring hurtigt til en sektion i den viste fil via denne liste
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Gå tilbage i navigationshistorikken
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Vend tilbage i navigationshistorikken
STR_TEXTFILE_WRAP_TEXT :{WHITE}Ombryd tekst
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ombryd teksten i vinduet, så det hele passer uden at skulle rulle
STR_TEXTFILE_VIEW_README :{BLACK}Se readme
@ -4711,6 +4731,7 @@ STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} ændringslog for {STRING}
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} licens for {STRING}
STR_TEXTFILE_SURVEY_RESULT_CAPTION :Forhåndsvisning af undersøgelsesresultat
STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD dokument '{STRING}'
# Vehicle loading indicators

@ -3400,6 +3400,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspecte
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} bij {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Object
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Spoortype
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Wegtype
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parameter 60+x voor NewGRF-variabele (hexadecimaal)

@ -3400,6 +3400,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspect
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING1} at {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Object
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Rail type
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road type
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal)

@ -3400,6 +3400,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspect
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} at {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Object
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Rail type
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road type
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal)

@ -3400,6 +3400,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspect
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} at {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Object
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Rail type
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road type
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal)

@ -1198,7 +1198,6 @@ STR_NEWGRF_INSPECT_SPRITE_DUMP_UNOPT_TOOLTIP :{BLACK}Zobrazí
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO :{BLACK}P
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO_TOOLTIP :{BLACK}Přejít na číslo spritu...
STR_NEWGRF_INSPECT_SPRITE_DUMP_PANEL_TOOLTIP :{BLACK}Kliknutí zvýrazní skupinu spritů{}Shift+kliknutí sbalí skupinu spritů{}Ctrl+kliknutí zvýrazní dočasný registr úložiště
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Typ silnice/tramvajové tratě
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_SIGNALS :Návěstidla
STR_NEWGRF_ERROR_UNIMPLEMETED_MAPPED_FEATURE_ID :Neimplementované přemapované feature ID: název: {2:STRING}, mapováno na: {5:HEX} (sprite {3:NUM})
STR_NEWGRF_ERROR_UNIMPLEMETED_MAPPED_PROPERTY :Neimplementované přemapované Action 0 property feature: {4:HEX}, název: {2:STRING}, mapováno na: {5:HEX} (sprite {3:NUM})

@ -1265,7 +1265,6 @@ STR_NEWGRF_INSPECT_SPRITE_DUMP_UNOPT_TOOLTIP :{BLACK}Display
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO :{BLACK}G
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO_TOOLTIP :{BLACK}Scroll to sprite number
STR_NEWGRF_INSPECT_SPRITE_DUMP_PANEL_TOOLTIP :{BLACK}Click to highlight sprite group{}Shift+Click to collapse sprite group{}Ctrl+Click to highlight temporary storage register
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road/tram type
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_SIGNALS :Signals
STR_NEWGRF_ERROR_UNIMPLEMETED_MAPPED_FEATURE_ID :Unimplemented remapped feature ID: name: {2:RAW_STRING}, mapped to: {5:HEX} (sprite {3:NUM})
STR_NEWGRF_ERROR_UNIMPLEMETED_MAPPED_PROPERTY :Unimplemented remapped Action 0 property feature: {4:HEX}, name: {2:RAW_STRING}, mapped to: {5:HEX} (sprite {3:NUM})

@ -1224,7 +1224,6 @@ STR_NEWGRF_INSPECT_SPRITE_DUMP_UNOPT_TOOLTIP :{BLACK}Amosar g
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO :{BLACK}G
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO_TOOLTIP :{BLACK}Desprazarse o sprite número
STR_NEWGRF_INSPECT_SPRITE_DUMP_PANEL_TOOLTIP :{BLACK}Click para destacar o grupo de sprites{}Shift+Click para compactar o grupo de sprites{}Ctrl+Click para destacar o rexistro de almacenamento temporal
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada/tranvía
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_SIGNALS :Sinais
STR_NEWGRF_ERROR_UNIMPLEMETED_MAPPED_FEATURE_ID :Característica non implementada remapeada ID: nome: {2:STRING}, mapeada a: {5:HEX} (sprite {3:NUM})
STR_NEWGRF_ERROR_UNIMPLEMETED_MAPPED_PROPERTY :Remapeado non implementado dunha característica da propiedade 'Action 0': {4:HEX}, nome: {2:STRING}, mapeado a: {5:HEX} (sprite {3:NUM})

@ -1098,7 +1098,6 @@ STR_NEWGRF_INSPECT_SPRITE_DUMP_UNOPT_TOOLTIP :{BLACK}Zeige Sp
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO :{BLACK}G
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO_TOOLTIP :{BLACK}Scrolle zum Sprite Nummer
STR_NEWGRF_INSPECT_SPRITE_DUMP_PANEL_TOOLTIP :{BLACK}Klicke, um Sprite-Gruppe hervorzuheben{}Umschalt+Klick, um die Sprite-Gruppe zu schließen{}Strg+Klick, um temporäres Speicherregister hervorzuheben
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Straßen(bahn)typ
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_SIGNALS :Signale
STR_NEWGRF_TOO_MANY_STRINGS :{WHITE}Nicht genügend String-IDs für alle NewGRFs vorhanden.

@ -1218,7 +1218,6 @@ STR_NEWGRF_INSPECT_SPRITE_DUMP_UNOPT_TOOLTIP :{BLACK}모든
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO :{BLACK}G
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO_TOOLTIP :{BLACK}특정 스프라이트 번호로 이동합니다
STR_NEWGRF_INSPECT_SPRITE_DUMP_PANEL_TOOLTIP :{BLACK}스프라이트 그룹을 강조 표시하려면 클릭하세요{}SHIFT+클릭하면 스프라이트 그룹을 접거나 펼 수 있습니다.{}Ctrl+클릭하면 임시 저장 레지스터를 강조 표시합니다.
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :도로/전차 종류
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_SIGNALS :신호기
STR_NEWGRF_ERROR_UNIMPLEMETED_MAPPED_FEATURE_ID :구현되지 않은 재배치된 기능 ID: 이름: {2:STRING}, 재배치: {5:HEX} (스프라이트 {3:NUM})
STR_NEWGRF_ERROR_UNIMPLEMETED_MAPPED_PROPERTY :구현되지 않은 재배치된 액션 0 속성 특성: {4:HEX}, 이름: {2:STRING}, 재배치: {5:HEX} (스프라이트 {3:NUM})

@ -1217,7 +1217,6 @@ STR_NEWGRF_INSPECT_SPRITE_DUMP_UNOPT_TOOLTIP :{BLACK}在没
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO :{BLACK}G
STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO_TOOLTIP :{BLACK}滚动Sprite编号
STR_NEWGRF_INSPECT_SPRITE_DUMP_PANEL_TOOLTIP :{BLACK}点击高亮Sprite组{}Shift+点击折叠Sprite组{}Ctrl+点击高亮临时存储寄存器
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :道路/电车道类型
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_SIGNALS :信号
STR_NEWGRF_ERROR_UNIMPLEMETED_MAPPED_FEATURE_ID :未生效的重映射特性 ID: name: {2:STRING}mapped to: {5:HEX} (sprite {3:NUM})
STR_NEWGRF_ERROR_UNIMPLEMETED_MAPPED_PROPERTY :未生效的重映射 Action 0 属性特性: {4:HEX}name: {2:STRING}mapped to: {5:HEX} (sprite {3:NUM})

@ -3400,6 +3400,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Tutki va
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} sijainnissa {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objekti
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Rautatien tyyppi
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tien tyyppi
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF muuttujan 60+x parametri (heksadesimaali)

@ -3401,6 +3401,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspecte
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} à {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objet
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Type de rail
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Type de route
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paramètre de variable NewGRF 60+x (héxadecimal)

@ -525,6 +525,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Elimina tutti i
# About menu
###length 11
STR_ABOUT_MENU_LAND_BLOCK_INFO :Informazioni sull'area di terreno
STR_ABOUT_MENU_HELP :Aiuto e manuali
STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Apri/chiudi console
STR_ABOUT_MENU_AI_DEBUG :Debug IA/Script
@ -1461,6 +1462,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nessuno*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Ridotto
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normale
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Consenti passaggi a livello con strade o ferrovie di proprietà dei concorrenti: {STRING}
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Consenti la realizzazione di passaggi a livello su strade o rotaie di proprietà dei concorrenti
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Consenti fermate passanti sulle strade di proprietà delle città: {STRING}
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Permettere la costruzione di fermate stradali passanti sulle strade di proprietà delle città.
@ -2157,6 +2160,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Multigio
STR_INTRO_GAME_OPTIONS :{BLACK}Opzioni di gioco
STR_INTRO_HIGHSCORE :{BLACK}Punteggi migliori
STR_INTRO_HELP :{BLACK}Aiuto e manuali
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Impostazioni
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Impostazioni NewGRF
STR_INTRO_ONLINE_CONTENT :{BLACK}Contenuti online
@ -2178,6 +2182,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Selezion
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Mostra le opzioni di gioco
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Mostra la tabella dei punteggi migliori
STR_INTRO_TOOLTIP_HELP :{BLACK}Ottieni l'accesso alla documentazione e alle risorse online
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Mostra le impostazioni
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Mostra le impostazioni NewGRF
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Controlla la disponibilità di contenuti nuovi o aggiornati da scaricare
@ -2200,6 +2205,17 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Si è s
STR_ABANDON_SCENARIO_QUERY :{YELLOW}Si è sicuri di voler abbandonare questo scenario?
# Help window
STR_HELP_WINDOW_CAPTION :{WHITE}Aiuto e manuali
STR_HELP_WINDOW_WEBSITES :{BLACK}Siti web
STR_HELP_WINDOW_DOCUMENTS :{BLACK}Documenti
STR_HELP_WINDOW_README :{BLACK}Leggimi
STR_HELP_WINDOW_CHANGELOG :{BLACK}Changelog
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Bug conosciuti
STR_HELP_WINDOW_LICENSE :{BLACK}Licenza
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Manuale / Wiki
STR_HELP_WINDOW_BUGTRACKER :{BLACK}Segnala un bug
STR_HELP_WINDOW_COMMUNITY :{BLACK}Community
# Cheat window
STR_CHEATS :{WHITE}Trucchi
@ -2688,6 +2704,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Attiva/d
STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Attiva/disattiva la trasparenza dei ponti. CTRL+clic per bloccare
STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Attiva/disattiva la trasparenza di strutture come fari e antenne. CTRL+clic per bloccare
STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Attiva/disattiva la trasparenza delle catenarie. CTRL+clic per bloccare
STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Attiva/disattiva la trasparenza per il caricamento e il testo costi/entrate. Ctrl+clic per bloccare
STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Rendi gli oggetti invisibili invece che trasparenti
# Linkgraph legend window
@ -3268,7 +3285,7 @@ STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostra i
STR_MAPGEN_AI_SETTINGS :{BLACK}Impostazioni IA
STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Mostra impostazioni IA
STR_MAPGEN_GS_SETTINGS :{BLACK}Impostazioni script di gioco
STR_MAPGEN_GS_SETTINGS_TOOLTIP :BLACK}Visualizza le impostazioni dello script di gioco
STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Visualizza le impostazioni dello script di gioco
###length 21
STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Inglesi (originali)
@ -3424,6 +3441,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Ispezion
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} a {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Oggetto
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipo di rotaie
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo di strada
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parametro variabile NewGRF 60+x (esadecimale)
@ -4739,6 +4757,11 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
# Textfile window
STR_TEXTFILE_JUMPLIST :{WHITE}Sommario
STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Passa rapidamente a una sezione del file visualizzato tramite questo elenco
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Torna indietro nella cronologia di navigazione
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Vai avanti nella cronologia di navigazione
STR_TEXTFILE_WRAP_TEXT :{WHITE}A capo automatico
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Manda automaticamente a capo il testo della finestra in modo che sia visibile senza doverlo scorrere
STR_TEXTFILE_VIEW_README :{BLACK}Visualizza file leggimi
@ -4749,6 +4772,7 @@ STR_TEXTFILE_README_CAPTION :{WHITE}File leg
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Changelog del {STRING} {STRING}
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Licenza del {STRING} {STRING}
STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Anteprima del risultato del sondaggio
STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}Documento OpenTTD '{STRING}'
# Vehicle loading indicators

@ -930,7 +930,7 @@ STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION}에서 이제 {STRING}{G 1 "을" "를"} 받을 수 있습니다.
STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION}에서 이제 {STRING}/{STRING}{G 2 "을" "를"} 받을 수 있습니다.
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}보조금 지급 계약 파기:{}{}{1:STRING}에서 {2:STRING}까지의 {0:STRING} 수송은{}더 이상 보조금을 지급하지 않습니다.
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}보조금 지급 종료:{}{}{1:STRING}에서 {2:STRING}까지의 {0:STRING} 수송은{}더 이상 보조금을 지급하지 않습니다.
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}보조금 지급 만료:{}{}{1:STRING}에서 {2:STRING}까지의{}{0:STRING} 수송 보조금은 더 이상 지급되지 않습니다.
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}보조금 지급 안내{}{}처음으로 {1:STRING}에서 {2:STRING}까지{}{0:STRING}{G 0 "을" "를"} 수송하는 회사는{}지역 당국으로부터 {3:NUM}년 동안 보조금을 받게 될 것입니다!
###length 4
@ -3401,6 +3401,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}상위
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING}, {HEX}에서
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :오브젝트
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :철도 종류
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :도로 종류
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF 변수 60+x 매개 변수 (16진법)

@ -902,6 +902,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Usuń wszystkie
# About menu
###length 11
STR_ABOUT_MENU_LAND_BLOCK_INFO :Informacje o terenie
STR_ABOUT_MENU_HELP :Pomoc i instrukcje
STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Przełącz konsolę
STR_ABOUT_MENU_AI_DEBUG :Debugowanie SI / Game Script
@ -1023,7 +1024,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Kliknij
# Company league window
STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Ranking firm
STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}'
STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} „{STRING}”
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Inżynier
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Administrator Ruchu
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Koordynator Transportu
@ -1123,9 +1124,9 @@ STR_HIGHSCORE_PERFORMANCE_TITLE_MAGNATE :Magnat
STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Potentat
STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Tycoon Stulecia
STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY}
STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA})
STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} osiąga status: '{STRING}'!
STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} z {COMPANY} osiągnęło status '{STRING}'!
STR_HIGHSCORE_STATS :{BIG_FONT}„{STRING}” ({COMMA})
STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} osiąga status: „{STRING}”!
STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} z {COMPANY} osiągnęło status „{STRING}”!
# Smallmap window
STR_SMALLMAP_CAPTION :{WHITE}Mapa - {STRING}
@ -1231,10 +1232,10 @@ STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLAC
STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Wypadek lotniczy!{}Samolot rozbił się z powodu braku paliwa, zginęł{P 0 a y o} {COMMA} os{P oba oby ób}!
STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Katastrofa Zeppelina na {STATION}!
STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Pojazd zniszczony w kolizji z 'UFO'!
STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Pojazd zniszczony w kolizji z „UFO”!
STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Eksplozja rafinerii w pobliżu {TOWN}!
STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Fabryka zniszczona w podejrzanych okolicznościach w pobliżu {TOWN}!
STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}'UFO' wylądowało w pobliżu {TOWN}!
STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}„UFO” wylądowało w pobliżu {TOWN}!
STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Tąpnięcie przy kopalni pozostawiło pas zniszczenia blisko {TOWN}!
STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Powódź!{}Przynajmniej {COMMA} zaginęło lub utonęło w czasie powodzi!
@ -1571,7 +1572,7 @@ STR_CITY_APPROVAL_TOLERANT :Tolerancyjne
STR_CITY_APPROVAL_HOSTILE :Wrogie
STR_CITY_APPROVAL_PERMISSIVE :Przyjazne (bez wpływu na działania firmy)
STR_WARNING_NO_SUITABLE_AI :{WHITE}Brak pasujących SI...{}Możesz pobrać wszystkie SI przez system "Dodatki online"
STR_WARNING_NO_SUITABLE_AI :{WHITE}Brak pasujących SI...{}Możesz pobrać wszystkie SI przez przeglądarkę „Dodatków Online”
# Settings tree window
STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Ustawienia
@ -1680,7 +1681,7 @@ STR_CONFIG_SETTING_CITY_APPROVAL :Nastawienie wł
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Wybierz, jak bardzo hałas i niszczenie środowiska przez firmy wpływają na ich ocenę w mieście i na dalsze działania związane z budową na jego obszarze
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Limit wysokości mapy: {STRING}
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Ustawia limit wysokości mapy. Z ustawieniem "(automatyczna)" odpowiednia wartość zostanie dobrana po wygenerowaniu terenu
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Ustawia limit wysokości mapy. Z ustawieniem „(automatyczna)” odpowiednia wartość zostanie dobrana po wygenerowaniu terenu
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(automatyczna)
@ -1759,7 +1760,7 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Po prawej
STR_CONFIG_SETTING_SHOWFINANCES :Pokazuj okno finansów na koniec roku: {STRING}
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Jeśli włączone, to okienko finansowe pokazuje się na zakończenie każdego roku, by ułatwić śledzenie sytuacji finansowej firmy
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nowe polecenia są domyślnie 'bez zatrzymywania się': {STRING}
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nowe polecenia są domyślnie „bez zatrzymywania się”: {STRING}
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalnie pojazd zatrzyma się na każdej stacji, przez którą przejeżdża. Po włączeniu tej opcji, pojazd przejedzie do swojego celu bez zatrzymywania się. Zwróć uwagę na to, że to ustawienie ma wpływ tylko na nowe polecenia. Pojedyncze polecenia mogą być ustalane bez względu na wartość tej opcji
STR_CONFIG_SETTING_STOP_LOCATION :Nowe rozkazy pociągu kończą się domyślnie na {STRING} peronu
@ -1894,7 +1895,7 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksymalna odle
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinerie są budowane tylko w pobliżu krawędzi map, to znaczy na wybrzeżach dla map wyspiarskich. To ustawienie pozwala ograniczyć jak daleko od krawędzi mapy mogą być budowane rafinerie i platformy wiertnicze. Na mapach większych niż 256 pól, wartość ta jest skalowana w górę.
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Wysokość granicy wiecznych śniegów: {STRING}
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Wysokość linii śniegu w klimacie arktycznym. Poziom pokrywy śnieżnej wpływa na rozmieszczenie przedsiębiorstw i na warunki rozwoju miast. Może być zmodyfikowana wyłącznie poprzez Edytor scenariusza, normalnie jest obliczana za pomocą ustawienia "pokrycia śniegiem"
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Wysokość linii śniegu w klimacie arktycznym. Poziom pokrywy śnieżnej wpływa na rozmieszczenie przedsiębiorstw i na warunki rozwoju miast. Może być zmodyfikowana poprzez Edytor Scenariuszy, w innym przypadku jest obliczana za pomocą ustawienia „pokrycie śniegiem”
STR_CONFIG_SETTING_SNOW_COVERAGE :Pokrycie śniegiem: {STRING}
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Ustawia przybliżoną ilość śniegu w krajobrazie arktycznym. Śnieg wpływa również wpływa na rozmieszczenie przedsiębiorstw i na warunki rozwoju miast. Używane tylko podczas generowania mapy. Teren tuż ponad poziomem morza jest zawsze bez śniegu
@ -1919,7 +1920,7 @@ STR_CONFIG_SETTING_RIVER_AMOUNT :Liczba rzek: {S
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Określa liczbę rzek na mapie
STR_CONFIG_SETTING_TREE_PLACER :Algorytm rozmieszczenia drzew: {STRING}
STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Metoda generowania terenów zalesionych. Algorytm "Oryginalny" rozmieszcza drzewa równomiernie na całej mapie, a "Ulepszony" gromadzi je w skupiska
STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Metoda generowania terenów zalesionych. Algorytm „oryginalny” rozmieszcza drzewa równomiernie na całej mapie, a „ulepszony” gromadzi je w skupiska
###length 3
STR_CONFIG_SETTING_TREE_PLACER_NONE :Brak
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Oryginalny
@ -2009,7 +2010,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Pojedyncze klik
STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Pojedyncze kliknięcie (natychmiast)
STR_CONFIG_SETTING_USE_RELAY_SERVICE :Używanie usługi przekaźnika: {STRING}
STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Jeśli nawiązanie połączenia z serwerem nie powiedzie się, można użyć usługi przekaźnika do nawiązania połączenia. „Nigdy" nie zezwoli na to, „pytaj” najpierw zapyta, „zezwól” pozwoli na to bez pytania
STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Jeśli nawiązanie połączenia z serwerem nie powiedzie się, można użyć usługi przekaźnika do nawiązania połączenia. „Nigdy nie zezwoli na to, „pytaj” najpierw zapyta, „zezwól” pozwoli na to bez pytania
###length 3
STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nigdy
STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Pytaj
@ -2029,11 +2030,11 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Nie
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Tak
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Tak, z wyjątkiem przypiętych
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Użyj {STRING} formatu daty dla nazw zapisów gry
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Użyj daty w formacie {STRING} dla nazw zapisów gry
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Format daty w nazwach plików zapisu gry
###length 3
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :długiego (31 grudnia 2008)
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :krótkiego (31-12-2008)
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :długim (31 grudnia 2008)
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :krótkim (31-12-2008)
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31)
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Automatycznie włącz pauzę przy rozpoczęciu nowej gry: {STRING}
@ -2060,10 +2061,10 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Pokazuj przyjaz
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Wyświetlanie przewidywanego przyjazdu i odjazdu w rozkładach
STR_CONFIG_SETTING_QUICKGOTO :Szybkie tworzenie poleceń pojazdu: {STRING}
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Po wybraniu stacji docelowej automatycznie włącz ponownie narzędzie 'idź do'
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Po wybraniu stacji docelowej automatycznie włącz ponownie narzędzie „idź do”
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Domyślny typ torów: {STRING}
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Rodzaj torów wybierany przy rozpoczęciu lub załadowaniu gry. 'Pierwszy dostępny' wybiera najstarszy rodzaj torów, 'najnowszy' wybiera najnowszy rodzaj torów, a 'najczęściej używany' wybiera ten, który jest używany najczęściej
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Rodzaj torów wybierany przy rozpoczęciu lub załadowaniu gry. „Pierwszy dostępny” wybiera najstarszy rodzaj torów, „najnowszy” wybiera najnowszy rodzaj torów, a „najczęściej używany” wybiera ten, który jest używany najczęściej
###length 3
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :pierwszy dostępny
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :najnowszy
@ -2469,21 +2470,21 @@ STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Zmiana w
# Config errors
STR_CONFIG_ERROR :{WHITE}Błąd w pliku konfiguracyjnym
STR_CONFIG_ERROR_ARRAY :{WHITE}... błąd w tablicy '{STRING}'
STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... nieprawidłowa wartość '{STRING}' dla '{STRING}'
STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... zbędne znaki na końcu ustawienia '{STRING}'
STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... ignorowanie NewGRF-a '{STRING}': zduplikowany GRF ID z '{STRING}'
STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... pominięcie nieprawidłowych NewGRF-ów '{STRING}': {STRING}
STR_CONFIG_ERROR_ARRAY :{WHITE}... błąd w tablicy „{STRING}”
STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... nieprawidłowa wartość „{STRING}” dla „{STRING}”
STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... zbędne znaki na końcu ustawienia „{STRING}”
STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... ignorowanie NewGRF-a „{STRING}”: zduplikowany GRF ID z „{STRING}”
STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... pominięcie nieprawidłowych NewGRF-ów „{STRING}”: {STRING}
STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :nie znaleziono
STR_CONFIG_ERROR_INVALID_GRF_UNSAFE :{G=n}niebezpieczne w stałym użyciu
STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :systemowe NewGRF
STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :niezgodne z tą wersją OpenTTD
STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :nieznany
STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... poziom kompresji '{STRING}' nie jest poprawny
STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... format zapisu gry '{STRING}' jest niedostępny. Powracanie do '{STRING}'
STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ignoruję zestaw Base Graphics '{STRING}': nie odnaleziono
STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignoruję zestaw Base Sounds '{STRING}': nie odnaleziono
STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignoruję zestaw Base Music '{STRING}': nie odnaleziono
STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... poziom kompresji „{STRING}” jest niepoprawny
STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... format zapisu gry „{STRING}” jest niedostępny. Powracanie do „{STRING}”
STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ignoruję zestaw Base Graphics „{STRING}”: nie odnaleziono
STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignoruję zestaw Base Sounds „{STRING}”: nie odnaleziono
STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignoruję zestaw Base Music „{STRING}”: nie odnaleziono
STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Brak pamięci
STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Nie powiodła się rezerwacja pamięci cache dla sprite'ów od wielkości {BYTES}. Pamięć cache sprite'ów została zredukowana do {BYTES}. Obniży to wydajność OpenTTD. By zmniejszyć zapotrzebowanie pamięci, możesz spróbować wyłączyć grafikę 32bpp i/lub poziomy zbliżenia
@ -2504,9 +2505,10 @@ STR_INTRO_MULTIPLAYER :{BLACK}Gra wiel
STR_INTRO_GAME_OPTIONS :{BLACK}Opcje gry
STR_INTRO_HIGHSCORE :{BLACK}Tabela wyników
STR_INTRO_HELP :{BLACK}Pomoc i Instrukcje
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Ustawienia
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Ustawienia NewGRF
STR_INTRO_ONLINE_CONTENT :{BLACK}Sprawdź dodatki online
STR_INTRO_ONLINE_CONTENT :{BLACK}Sprawdź Dodatki Online
STR_INTRO_AI_SETTINGS :{BLACK}Ustawienia SI
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Ustawienia Game Script
STR_INTRO_QUIT :{BLACK}Wyjście
@ -2525,6 +2527,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Wybierz
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Wyświetl opcje gry
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Wyświetl tabelę wyników
STR_INTRO_TOOLTIP_HELP :{BLACK}Uzyskaj dostęp do dokumentacji i zasobów online
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Wyświetl ustawienia gry
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Wyświetl ustawienia NewGRF
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Poszukaj nowych lub zaktualizowanych dodatków do pobrania
@ -2547,6 +2550,17 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Czy na
STR_ABANDON_SCENARIO_QUERY :{YELLOW}Czy na pewno chcesz porzucić ten scenariusz?
# Help window
STR_HELP_WINDOW_CAPTION :{WHITE}Pomoc i Instrukcje
STR_HELP_WINDOW_WEBSITES :{BLACK}Strony internetowe
STR_HELP_WINDOW_DOCUMENTS :{BLACK}Dokumenty
STR_HELP_WINDOW_README :{BLACK}Plik „readme”
STR_HELP_WINDOW_CHANGELOG :{BLACK}Lista Zmian
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Znane Błędy
STR_HELP_WINDOW_LICENSE :{BLACK}Licencja
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Podręcznik / Wiki
STR_HELP_WINDOW_BUGTRACKER :{BLACK}Zgłoś Błąd
STR_HELP_WINDOW_COMMUNITY :{BLACK}Społeczność
# Cheat window
STR_CHEATS :{WHITE}Oszustwa
@ -2623,7 +2637,7 @@ STR_FACE_FACECODE :{BLACK}Numer tw
STR_FACE_FACECODE_TOOLTIP :{BLACK}Obejrzyj i/lub ustaw numer twarzy prezesa firmy
STR_FACE_FACECODE_CAPTION :{WHITE}Obejrzyj i/lub ustaw numer twarzy prezesa
STR_FACE_FACECODE_SET :{WHITE}Ustawiono nowy numer twarzy gracza
STR_FACE_FACECODE_ERR :{WHITE}Nie można ustawić numeru twarzy prezesa - musi być liczbą pomiędzy 0 a 4'294'967'295!
STR_FACE_FACECODE_ERR :{WHITE}Nie można ustawić numeru twarzy prezesa - musi być liczbą pomiędzy 0 a 4{NBSP}294{NBSP}967{NBSP}295!
STR_FACE_SAVE :{BLACK}Zapisz
STR_FACE_SAVE_TOOLTIP :{BLACK}Zapisz ulubioną twarz
STR_FACE_SAVE_DONE :{WHITE}Ta twarz będzie zapisana w pliku konfiguracyjnym OpenTTD jako twoja ulubiona
@ -2858,7 +2872,7 @@ STR_NETWORK_CHAT_CLIENT :[Prywatna] {STR
STR_NETWORK_CHAT_TO_CLIENT :[Prywatna] Do {STRING}: {WHITE}{STRING}
STR_NETWORK_CHAT_ALL :[Wszyscy] {STRING}: {WHITE}{STRING}
STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING}
STR_NETWORK_CHAT_OSKTITLE :{BLACK}Wpisz tekst do chat'u
STR_NETWORK_CHAT_OSKTITLE :{BLACK}Wprowadź tekst do czatu sieciowego
# Network messages
STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nie znaleziono urządzeń sieciowych
@ -2988,7 +3002,7 @@ STR_CONTENT_DETAIL_FILESIZE :{SILVER}Rozmiar
STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER}Zaznaczono z powodu: {WHITE}{STRING}
STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}Zależności: {WHITE}{STRING}
STR_CONTENT_DETAIL_TAGS :{SILVER}Tagi: {WHITE}{STRING}
STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD jest zbudowany bez wsparcia dla "zlib"...
STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD jest zbudowany bez wsparcia dla „zlib”...
STR_CONTENT_NO_ZLIB_SUB :{WHITE}... pobieranie zawartości nie jest możliwe!
# Order of these is important!
@ -3114,7 +3128,7 @@ STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Wybierz
STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Długość peronu
STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Wybierz długość stacji
STR_STATION_BUILD_DRAG_DROP :{BLACK}Przeciągnij i upuść
STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Buduj stację używając "przeciągnij i upuść"
STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Buduj stację używając „przeciągnij i upuść”
STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Wybierz rodzaj stacji do pokazania
STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Wybierz typ stacji do zbudowania
@ -3131,13 +3145,13 @@ STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Przełą
STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sygnalizator bloku (semafor){}Najprostszy typ sygnału pozwalający na przebywanie w jednym bloku wyłącznie jednemu pociągowi naraz
STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sygnalizator wejściowy (semafor){}Zielony, póki choć jeden sygnalizator wyjściowy dla kolejnego odcinka trasy jest zielony. W przeciwnym wypadku czerwony.
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sygnalizator wyjściowy (semafor){}Zachowuje się jak sygnalizator blokowy, lecz jest niezbędny do zmiany na poprawny kolor w presygnalizatorach wejściowych i złożonych
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Sygnalizator złożony (semafor){}Sygnalizator złożony zachowuje się jak kombinacja sygnalizatorów wejściowych oraz wyjściowych. Umożliwia to budowę wielkich "drzew" presygnalizatorów
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Sygnalizator złożony (semafor){}Sygnalizator złożony zachowuje się jak kombinacja sygnalizatorów wejściowych oraz wyjściowych. Umożliwia to budowę wielkich „drzew” presygnalizatorów
STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sygnalizator trasy (semafor){}Sygnalizator trasy umożliwiający wejście więcej niż jednemu pociagowi do bloku sygnalizatorów, o ile pociąg może zarezerwować trasę do bezpiecznego punktu zatrzymania. Zwykłe sygnalizatory trasy mogą być mijane w przeciwnym kierunku
STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Jednokierunkowy sygnalizator trasy (semafor){}Sygnalizator trasy umożliwiający wejście więcej niż jednemu pociagowi do bloku sygnalizatorów, o ile pociąg może zarezerwować trasę do bezpiecznego punktu zatrzymania. Sygnalizatory jednokierunkowe nie mogą być mijane w przeciwnym kierunku
STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sygnalizator bloku (elektryczny){}Najprostszy typ sygnału pozwalający na przebywanie w jednym bloku wyłącznie jednemu pociągowi naraz
STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Sygnalizator wejściowy (elektryczny){}Zielony, póki choć jeden sygnalizator wyjściowy dla kolejnego odcinka trasy jest zielony. W przeciwnym przypadku czerwony
STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sygnalizator wyjściowy (elektryczny){}Zachowuje się jak sygnalizator blokowy, lecz jest niezbędny do zmiany na poprawny kolor w presygnalizatorach wejściowych i złożonych
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sygnalizator złożony (elektryczny){}Sygnalizator złożony działa jako sygnał wejściowy i wyjściowy. Umożliwia to budowę wielkich "drzew" presygnalizatorów
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sygnalizator złożony (elektryczny){}Sygnalizator złożony działa jako sygnał wejściowy i wyjściowy. Umożliwia to budowę wielkich „drzew” presygnalizatorów
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sygnalizator trasy (elektryczny){}Sygnalizator trasy umożliwiający wejście więcej niż jednemu pociagowi do bloku sygnalizatorów, o ile pociąg może zarezerwować trasę do bezpiecznego punktu zatrzymania. Zwykłe sygnalizatory trasy mogą być mijane w przeciwnym kierunku
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Jednokierunkowy sygnalizator trasy (elektryczny){}Sygnalizator trasy umożliwiający wejście więcej niż jednemu pociagowi do bloku sygnalizatorów, o ile pociąg może zarezerwować trasę do bezpiecznego punktu zatrzymania. Sygnalizatory jednokierunkowe nie mogą być mijane w przeciwnym kierunku
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Zamiana sygnałów{}Jeżeli włączone, kliknięcie na istniejący sygnał spowoduje zamianę go na wybrany typ i wariant. Ctrl+klik przełącza istniejący wariant. Shift+klik pokazuje szacowany koszt zamiany
@ -3766,6 +3780,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Zbadaj o
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} w {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Obiekt
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Typ szyn
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Rodzaj drogi
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGFR zmienna 60+parametr x (heksadecymalnie)
@ -3822,7 +3837,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Potrzebne źró
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} został wyłączony przez {STRING}
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Niepoprawny/nieznany format układu sprite'u (sprite {3:NUM})
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Zbyt wiele elementów na liście wartości właściwości (sprite {3:NUM}, właściwość {4:HEX})
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Niewłaściwy wywołanie produkcji przedsiębiorstwa (sprite {3:NUM}, "{2:STRING}")
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Nieprawidłowe wywołanie zwrotne produkcji przedsiębiorstwa (sprite {3:NUM}, „{2:STRING}”)
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Uwaga!
@ -3845,17 +3860,17 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Znalezi
STR_NEWGRF_LIST_MISSING :{RED}Brakujące pliki
# NewGRF 'it's broken' warnings
STR_NEWGRF_BROKEN :{WHITE}Zachowanie NewGRF '{0:STRING}' może powodować desynchronizacje i/lub błędy
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Zmieniony stan wagonu silnikowego '{1:ENGINE}', gdy był poza halą warsztatów
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Zmiana długości pojazdu '{1:ENGINE}' , który nie jest zatrzymany w hali
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Zmieniono ładowność pojazdu na '{1:ENGINE}', kiedy nie był w hali warsztatów lub w trakcie przebudowy
STR_NEWGRF_BROKEN :{WHITE}Zachowanie NewGRF „{0:STRING}” może powodować desynchronizacje i/lub błędy
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Zmieniony stan wagonu silnikowego „{1:ENGINE}”, gdy był poza halą warsztatów
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Zmiana długości pojazdu „{1:ENGINE}”, który nie jest zatrzymany w hali warsztatów
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Zmieniono ładowność pojazdu na „{1:ENGINE}”, kiedy nie był w hali warsztatów lub w trakcie przebudowy
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Pociąg „{VEHICLE}” należący do „{COMPANY}” ma nieprawidłową długość. Prawdopodobnie jest to spowodowane problemami z NewGRF-ami. Gra może się desychronizować lub zawiesić
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' dostarcza niepoprawnych danych
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informacje o ładunku/naprawie dla '{1:ENGINE}' różnią się od listy zakupu po zbudowaniu. Może to spowodować, że autoodnowienie/-zamiana nie wykona remontu poprawnie
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' spowodował nieskończoną pętlę w wywołaniu produkcji
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Wywołanie {1:HEX} zwróciło nieznany/błędny wynik {2:HEX}
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' zwrócił niewłaściwy typ ładunku w wywołaniu produkcji w {2:HEX}
STR_NEWGRF_BUGGY :{WHITE}NewGRF „{0:STRING}” dostarcza niepoprawne dane
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informacje o ładunku/naprawie dla „{1:ENGINE}” różnią się od listy zakupu po zbudowaniu. Może to spowodować, że autoodnowienie/-zamiana nie wykona remontu poprawnie
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}„{1:STRING}” spowodował nieskończoną pętlę w wywołaniu zwrotnym produkcji
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Wywołanie zwrotne {1:HEX} zwróciło nieznany/błędny wynik {2:HEX}
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}„{1:STRING}” zwrócił niewłaściwy typ ładunku w wywołaniu zwrotnym produkcji w {2:HEX}
# 'User removed essential NewGRFs'-placeholders for stuff without specs
STR_NEWGRF_INVALID_CARGO :<nieprawidłowy ładunek>
@ -5023,7 +5038,7 @@ STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Pokaż o
STR_AI_GAME_SCRIPT :{BLACK}Game Script
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Sprawdź log Game Script
STR_ERROR_AI_NO_AI_FOUND :Nie znaleziono SI do wczytania.{}SI jest nieaktywne i nic nie robi.{}Możesz ściągnąć SI z 'Dodatki Online' w głównym menu gry
STR_ERROR_AI_NO_AI_FOUND :Nie znaleziono SI do wczytania.{}SI jest nieaktywne i nic nie robi.{}Możesz pobrać kilka SI z przeglądarki „Dodatków Online”
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Jeden z uruchomionych skryptów przestał działać. Prosimy o zgłoszenie tego autorowi skryptu dołączając zrzut ekranu okna debugowania SI / GameScript
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Okno debugowania SI / Game Script jest dostępne tylko na serwerze
@ -5087,6 +5102,11 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
# Textfile window
STR_TEXTFILE_JUMPLIST :{WHITE}Spis Treści
STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Przeskocz do wybranej sekcji w wyświetlanym pliku za pomocą tej listy
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Cofnij się w historii nawigacji
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Powrót do przodu w historii nawigacji
STR_TEXTFILE_WRAP_TEXT :{WHITE}Zawijaj tekst
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Zawiń tekst w oknie, aby zmieścił się bez konieczności przewijania
STR_TEXTFILE_VIEW_README :{BLACK}Odczytaj plik „readme”
@ -5097,6 +5117,7 @@ STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} {STRING} - lista zmian
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} {STRING} - licencja
STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Podgląd wyniku ankiety
STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}Dokument OpenTTD „{STRING}”
# Vehicle loading indicators
@ -5164,8 +5185,8 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Znalezio
STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Ogromny zrzut ekranu
STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Zrzut ekranu będzie miał rozdzielczość {COMMA} x {COMMA} pikseli. Zrzut ekranu może zająć chwilę. Kontynuować?
STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Mapa wysokości pomyślnie zapisana jako '{STRING}'. Najwyższy szczyt wynosi {NUM}
STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Zrzut ekranu zapisany na dysk z powodzeniem '{STRING}'
STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Mapa wysokości pomyślnie zapisana jako „{STRING}”. Najwyższy szczyt wynosi {NUM}
STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Zrzut ekranu zapisany na dysk z powodzeniem „{STRING}”
STR_ERROR_SCREENSHOT_FAILED :{WHITE}Błąd zrzutu ekranu!
# Error message titles

@ -3401,6 +3401,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspecci
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} em {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objecto
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipo de ferrovia
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x do NewGRF (hexadecimal)

@ -3575,6 +3575,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Прос
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} в {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Объект
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Тип рельсов
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Тип дороги
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметр переменной NewGRF 60+x (шестнадцатеричный)

@ -191,6 +191,23 @@ STR_COLOUR_WHITE :白 色
STR_COLOUR_RANDOM :随机
###length 17
STR_COLOUR_SECONDARY_DARK_BLUE :深蓝色
STR_COLOUR_SECONDARY_PALE_GREEN :浅绿色
STR_COLOUR_SECONDARY_SECONDARY_PINK :粉色
STR_COLOUR_SECONDARY_YELLOW :黄 色
STR_COLOUR_SECONDARY_RED :红 色
STR_COLOUR_SECONDARY_LIGHT_BLUE :淡蓝色
STR_COLOUR_SECONDARY_GREEN :绿 色
STR_COLOUR_SECONDARY_DARK_GREEN :深绿色
STR_COLOUR_SECONDARY_BLUE :蓝 色
STR_COLOUR_SECONDARY_CREAM :奶油色
STR_COLOUR_SECONDARY_MAUVE :深紫色
STR_COLOUR_SECONDARY_PURPLE :紫 色
STR_COLOUR_SECONDARY_ORANGE :橘黄色
STR_COLOUR_SECONDARY_BROWN :棕 色
STR_COLOUR_SECONDARY_GREY :浅灰色
STR_COLOUR_SECONDARY_WHITE :白 色
STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :与主色调相同
# Units used in OpenTTD
@ -198,6 +215,7 @@ STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}
STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}千米/小时
STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}米/秒
STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}格/天
STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}节
STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}匹马力
STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}匹马力
@ -346,9 +364,9 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}打开
###length 31
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}暂停游戏
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}快速游戏模式
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}选项
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}保存游戏、放弃游戏、退出
STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}显示地图、附加视点或标志列表
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}选项和设置
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}保存游戏、读取游戏、放弃游戏、退出
STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}显示地图、附加视点、客货流或标志列表
STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}显示城镇列表
STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}显示财政补贴
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}显示公司所有的车站列表
@ -356,9 +374,9 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}显示
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}显示公司综合信息
STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}显示公司历史纪录
STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}显示游戏目标选单
STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}显示图表
STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}显示图表和货物运费表
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}显示公司名次表
STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}工业设施列表/产业链/建立新工业设施
STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}查看工业设施或投资工业设施建设
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}显示公司的火车列表。按住 Ctrl 键单击可以切换组群和车辆列表。
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}显示公司的汽车列表。按住 Ctrl 键单击可以切换组群和汽车列表。
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}显示公司的船只列表。按住 Ctrl 键单击可以切换组群和船只列表。
@ -372,8 +390,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}显示
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}显示机场建设工具
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}打开景观美化工具栏{}以修改地形、设置地貌等
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}显示 声音/音乐 控制菜单
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}显示最新消息新闻,消息选项,消息历史
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}地块信息查询控制台脚本调试截图关于OpenTTD
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}显示最新消息、新闻,消息历史或删除所有消息
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}查询地块信息、截图、关于 OpenTTD 和开发者工具
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}切换工具栏
# Extra tooltips for the scenario editor toolbar
@ -505,6 +523,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :删除全部消
# About menu
###length 11
STR_ABOUT_MENU_LAND_BLOCK_INFO :查询地块信息
STR_ABOUT_MENU_HELP :帮助和指南
STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :切换到控制台模式
STR_ABOUT_MENU_AI_DEBUG :AI /游戏脚本调试
@ -606,7 +625,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}利润
STR_GRAPH_INCOME_CAPTION :{WHITE}收入图表
STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}运输的货物总数
STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}公司评价表现指数 (最大指数为1000)
STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}公司市值
STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}公司市值图表
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}货物运输价格
STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}运输时间(天)
@ -848,7 +867,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC
STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} 已经宣布破产,所有资产均已抵债!
STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}新的运输公司开业大吉!
STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} 在 {TOWN} 附近开工建设!
STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} 被 {STRING} 收购!
STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} 被 {STRING} 以未知的价格收购
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(总裁)
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} 赞助了城镇 {TOWN} 的建设!
@ -933,12 +952,27 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}将主
# Game options window
STR_GAME_OPTIONS_CAPTION :{WHITE}游戏选项
STR_GAME_OPTIONS_TAB_GENERAL :通用
STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}选择通用设定
STR_GAME_OPTIONS_TAB_GRAPHICS :图形包
STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}选择图形组设定
STR_GAME_OPTIONS_TAB_SOUND :音效
STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}选择音乐和音效的设定
STR_GAME_OPTIONS_VOLUME :音量
STR_GAME_OPTIONS_SFX_VOLUME :音效
STR_GAME_OPTIONS_MUSIC_VOLUME :音乐
STR_GAME_OPTIONS_VOLUME_0 :0%
STR_GAME_OPTIONS_VOLUME_25 :25%
STR_GAME_OPTIONS_VOLUME_50 :50%
STR_GAME_OPTIONS_VOLUME_75 :75%
STR_GAME_OPTIONS_VOLUME_100 :100%
STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}货币单位
STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}货币单位选择
STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING})
###length 42
STR_GAME_OPTIONS_CURRENCY_GBP :英镑
@ -990,6 +1024,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}选择
# Autosave dropdown
###length 5
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :关闭
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :每10分钟
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :每30分钟
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :每60分钟
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :每120分钟
STR_GAME_OPTIONS_LANGUAGE :{BLACK}语言
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}选择界面语言
@ -1026,6 +1064,13 @@ STR_GAME_OPTIONS_GUI_SCALE_3X :3倍
STR_GAME_OPTIONS_GUI_SCALE_4X :4倍
STR_GAME_OPTIONS_GUI_SCALE_5X :5倍
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}自动体验调查
STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}参与自动体验调查
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}“打开”时, OpenTTD会在结束游戏时传输调查结果
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}关于体验调查和隐私
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}这会提供更多自动体验调查的信息(打开浏览器)
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}预览调查结果
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}展示正在运行的存档的调查结果
STR_GAME_OPTIONS_GRAPHICS :{BLACK}图像
@ -1035,12 +1080,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz
STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}高于 60Hz 的刷新率可能会影响性能。
STR_GAME_OPTIONS_BASE_GRF :{BLACK}基础图形组
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}选择要使用的基础图形组
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}选择要使用的基础图形组(只能在主菜单更改,不能在游戏中更改)
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} 文件{}未找到或不正确
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}关于基本图组的额外信息
STR_GAME_OPTIONS_BASE_SFX :{BLACK}基础音效组
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}选择要使用的基础音效组
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}选择要使用的基础音效组(只能在主菜单更改,不能在游戏中更改)
STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}有关基础音效组的附加信息
STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}基础音乐组
@ -1156,6 +1201,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}展开
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}关闭全部
STR_CONFIG_SETTING_RESET_ALL :{BLACK}重置所有值
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(没有可用的提示)
STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR}
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}默认值: {ORANGE}{STRING}
STR_CONFIG_SETTING_TYPE :{LTBLUE}设置类型: {ORANGE}{STRING}
STR_CONFIG_SETTING_TYPE_CLIENT :当前客户端设置(不保存,影响所有游戏)
@ -1209,6 +1255,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :左侧
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :中央
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :右侧
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}秒
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大初始贷款: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响)
@ -1337,7 +1384,7 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :新的调度命
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :通常,车辆在它经过的每一个车站都会停车。“打开”本选项时,车辆会不停车的通过所有中间车站前往最终目的地。注意:这只是为每一条新调度命令设置一个默认信息,仍然可以为每条调度命令设置明确的信息
STR_CONFIG_SETTING_STOP_LOCATION :新列车调度计划中默认命令为停靠在站台{STRING} 位置
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :设置车辆在站台的默认停靠位置,“近端”是靠近车辆进入的那一端,“中间”是站台中间位置,“远端”是远离车辆进入的那一端
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :设置车辆在站台的默认停靠位置,“近端”是靠近车辆进入的那一端,“中间”是站台中间位置,“远端”是远离车辆进入的那一端。注意:本设定只改变新指令的默认设定。玩家仍可通过点击指令文字改变列车在某车站的停车位置。
###length 3
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :近端
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :中间
@ -1380,6 +1427,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :不出现*
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :较少出现
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :正常
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :允许在竞争对手所属的道路或铁路上建平交道口: {STRING}
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :“打开”时,允许在竞争对手所属的道路上建平交道口
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :允许在城镇所属的道路上建通过式车站: {STRING}
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :“打开”时允许在城市所属的道路上建设通过式车站
@ -1393,6 +1442,8 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :固定资产会
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :初创公司颜色:{STRING}
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :选定公司的初始配色方案
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :公司初始副色调: {STRING}
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :如果正在使用的NewGRF允许选定一个公司初始副色调。
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :总允许建设小型机场: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :“打开”此选项,每种类型机场出现后一直是可用的
@ -1537,7 +1588,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :灰色到红色
STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :灰度
STR_CONFIG_SETTING_SCROLLMODE :视点滚动方式:{STRING}
STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :滚动地图的行为
STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :用鼠标拖动地图时的行为。“鼠标位置锁定”选项并不在任何平台上适用如基于网页的版本、触屏、Linux 上的 Wayland等
###length 4
STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :鼠标右键移动视角,鼠标指针不跟随移动
STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :鼠标右键移动地图,鼠标指针不跟随移动
@ -1595,6 +1646,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :关闭
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :右键关闭窗口: {STRING}
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :使用在窗口内按右键关闭该窗口,本功能与右键工具提示不能共存!
###length 3
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :否
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :是
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :是(非粘滞)
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :使用 {STRING} 形式的文件名存档
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :游戏存档文件名中日期的格式
@ -1716,7 +1770,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :单个脚本强
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
STR_CONFIG_SETTING_SERVINT_ISPERCENT :保养周期(百分数) {STRING}
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :选择触发车辆保养的条件,距离上一次保养的时间或者与最高可靠性的百分比
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :“打开”时,当车辆的可靠性降到他们最大可靠性的一定百分比时,他们会去保养。{}{}例如如果一辆车的最大可靠性是90%而保养间隔是20%车辆会在可靠性为72%时去保养。
STR_CONFIG_SETTING_SERVINT_TRAINS :火车默认保养周期:{STRING}
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :如果没有为火车直接指定保养周期,设定默认火车保养周期
@ -1846,8 +1900,8 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :“打开”时
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :允许城镇建设平交道: {STRING}
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :“打开”时允许城镇建设平交路口
STR_CONFIG_SETTING_NOISE_LEVEL :允许城镇控制机场噪音 {STRING}
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :“关闭”本选项时,每个城镇可以建设两个机场,“打开”时,可以建设的机场数目取决于城市对噪音的忍耐度,而这与城市人口、机场规模和距离有关
STR_CONFIG_SETTING_NOISE_LEVEL :基于噪音级别控制机场建设 {STRING}
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :允许城镇基于城镇人口、机场大小和距离控制机场噪音。“关闭”时,每个城市只允许建设两座机场,除非地方政府态度被设为“宽容的”
STR_CONFIG_SETTING_TOWN_FOUNDING :在游戏中建立城镇: {STRING}
STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :“打开”本选项时,允许玩家在游戏中创建新城镇
@ -1921,6 +1975,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :没有
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :初始城市规模因子:{STRING}
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :游戏开局时,城市的平均规模相对于普通城镇的比值
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :每 {STRING} 更新货物分配
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :两次连结图的重新计算间隔。每次重新计算会计算图中一个部分的计划。这意味着填入的值X不意味着整张图会每X秒更新一次只有其中的一部分会被更新。此设定赋值越小则更多的CPU时间会被用来重新计算。此设定赋值越大则在线路改变时货物再分配所需时间会变长。
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :花费 {STRING} 在货物分配的重新计算上
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :每一个连结图的重新计算时间。当一次重新计算开始,一个线程会被允许运行这个秒数。此设定赋值越小,则线程无法按时结束的可能性越大,从而导致游戏运行延迟。此设定赋值越大,则在线路改变时货物再分配所需时间会变长。
STR_CONFIG_SETTING_DISTRIBUTION_PAX :乗客分配方式:{STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :假设有交通路线连接甲、乙两站。“对称”指甲站往乙站的乗客数量与乙站往甲站的乘客数量大致相同。“不对称”指任何一站往另一站的乘客数量皆由系统随意决定。“手动”指系统不会自动分配乘客的目的地。
@ -1946,13 +2004,15 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :如果把此设
STR_CONFIG_SETTING_SHORT_PATH_SATURATION :如果最短路径的饱和度超过{STRING},把货物改派往容量较大的路径
STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :货物分配功能在派送货物时,会优先使用最短路径,当它饱和后改用第二短的路径,如此类推。当所有路径皆饱和但仍未满足需求,系统會由容量较大的路径开始继续加载货物。{}由于路径饱和度难以准确估算,此设定容许您定义一值,使短路径达到该饱和度后,系统便开始加载容量较大的路径。{}如果此设定的值少於100%,就算系统高估路径容量,也不會使过多的货物滞留在站台上。
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :速度单位:{STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :速度单位(陆地):{STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :速度单位 (航海): {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :在界面上以所选择的单位表示速度
###length 5
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :英制(英里/小时)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :公制(千米/小时)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :国际单位制(米/秒)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :游戏单位 (格/日)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :节
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :运输工具功率单位:{STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :在界面上以所选择的单位表示运输工具的功率
@ -2051,6 +2111,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}无法
# Video initalization errors
STR_VIDEO_DRIVER_ERROR :{WHITE}图形设置错误…
STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}… 找不到合适的 GPU。硬件加速已禁用
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... GPU使游戏崩溃了。硬件加速已禁用
# Intro window
STR_INTRO_CAPTION :{WHITE}OpenTTD {REV}
@ -2064,6 +2125,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}联机
STR_INTRO_GAME_OPTIONS :{BLACK}游戏选项
STR_INTRO_HIGHSCORE :{BLACK}高分榜
STR_INTRO_HELP :{BLACK}帮助和指南
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}设置
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF 设置
STR_INTRO_ONLINE_CONTENT :{BLACK}在线查找扩展包
@ -2085,6 +2147,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}选择
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}显示游戏选项
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}显示高分榜
STR_INTRO_TOOLTIP_HELP :{BLACK}获取说明和在线资源
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}显示设置
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}显示GRF设定
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}连接服务器并查找扩展包
@ -2107,6 +2170,17 @@ STR_ABANDON_GAME_QUERY :{YELLOW}你确
STR_ABANDON_SCENARIO_QUERY :{YELLOW}你确定要退出当前场景吗?
# Help window
STR_HELP_WINDOW_CAPTION :{WHITE}帮助和指南
STR_HELP_WINDOW_WEBSITES :{BLACK}网页
STR_HELP_WINDOW_DOCUMENTS :{BLACK}文档
STR_HELP_WINDOW_README :{BLACK}查看说明
STR_HELP_WINDOW_CHANGELOG :{BLACK}更新日志
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}已知漏洞
STR_HELP_WINDOW_LICENSE :{BLACK}许可证
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}手册 / 百科
STR_HELP_WINDOW_BUGTRACKER :{BLACK}反馈游戏漏洞
STR_HELP_WINDOW_COMMUNITY :{BLACK}社区
# Cheat window
STR_CHEATS :{WHITE}作弊
@ -2355,6 +2429,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}/{NUM}所公司
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}服务器管理员允许的当前连接的玩家数量、公司数量和最多公司数量
# Matches ConnectionType
@ -2382,6 +2457,12 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}否
STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}是,本次请求
STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}是,不要再次询问
STR_NETWORK_ASK_SURVEY_CAPTION :是否参与自动调查?
STR_NETWORK_ASK_SURVEY_TEXT :您是否愿意参与自动体验调查?{} OpenTTD 会在结束游戏时传输调查结果。{} 您可以在任意时刻在“游戏选项”菜单修改本选项。
STR_NETWORK_ASK_SURVEY_PREVIEW :预览调查结果
STR_NETWORK_ASK_SURVEY_LINK :关于体验调查和隐私
STR_NETWORK_ASK_SURVEY_NO :否
STR_NETWORK_ASK_SURVEY_YES :是
STR_NETWORK_SPECTATORS :旁观者
@ -2588,6 +2669,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}调整
STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}调整桥梁是否为透明{}CTRL+点击 锁定
STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}调整灯塔及信号发射塔是否为透明{}CTRL+点击 锁定
STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}调整电气铁路电线是否为透明{}CTRL+点击 锁定
STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}调整装卸提示和盈亏提示是否为透明{}CTRL+点击 锁定
STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}选择设置为:不显示或透明
# Linkgraph legend window
@ -2671,8 +2753,11 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}使用
STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}选择一个要显示车站类型
STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}选择要建造的车站类型
STR_STATION_CLASS_DFLT :默认车站
STR_STATION_CLASS_DFLT :默认
STR_STATION_CLASS_DFLT_STATION :默认车站
STR_STATION_CLASS_DFLT_ROADSTOP :默认道路站点
STR_STATION_CLASS_WAYP :路标
STR_STATION_CLASS_WAYP_WAYPOINT :默认路点
# Signal window
STR_BUILD_SIGNAL_CAPTION :{WHITE}信号灯
@ -2896,14 +2981,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}移除
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}你确定要清除所有工业吗?
# Industry cargoes window
STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}{STRING} 的产业链
STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}{STRING} 的产业链
STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}产业链- {STRING}
STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}货物的产业链 - {STRING}
STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}供应商
STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}采购商
STR_INDUSTRY_CARGOES_HOUSES :{WHITE}房屋
STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}点击查看上下游产业链
STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}点该货物可显示其上下游工业
STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}显示产业链
STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}产业链
STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}显示货物的上下游工业
STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}在缩略地图显示
STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}将该产业链的工业显示在缩略地图中
@ -3315,6 +3400,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}检查
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} at {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :物件
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :铁路类型
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :道路类型
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x 参数 (十六进制)
@ -3349,6 +3435,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
STR_NEWGRF_ERROR_MSG_WARNING :{RED}警告:{SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_ERROR :{RED}错误:{SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_FATAL :{RED}严重错误:{SILVER}{STRING}
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF "{STRING}" 发生了严重错误:{}{STRING}
STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF "{STRING}"发生了一个错误:{}{STRING}
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} 不能与 OpenTTD 报告的 TTDPatch 版本兼容。
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} 是为 {2:STRING} 版 TTD 开发的。
@ -3497,8 +3584,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}资助市政道路进行重建。{}将造成市内交通阻断 6 个月。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}以公司的名义设立一尊塑像。{}为位于该城镇的车站提供永久的评分增益。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}资助市内建设新的商业设施。{}为城镇提供暂时的成长速度增益。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}购买该市一年的运输专营权。{}其间该市的乘客及货物只允许选用贵公司的运输服务。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}贿赂地方政府以提高评价,但有被发现后严厉惩罚的风险。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}购买该市一年的运输专营权。{}其间该市的乘客及货物只允许选用贵公司的运输服务。若竞争对手对该市的贿赂成功,此合同将被取消。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}贿赂地方政府以提高评价,并终止竞争者的运输专营权,但有被发现后严厉惩罚的风险。{}{POP_COLOUR}费用:{CURRENCY_LONG}
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} 目标
@ -3720,6 +3807,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}固定
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}显示详细的设施情况
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}给予资金
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}给予该公司资金
STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}不受其欢迎的收购
STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}对此公司进行不受其欢迎的收购
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}新的头像
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}为总裁选择新头像
@ -3735,6 +3824,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :总裁姓名
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :输入你要给予的金额
STR_BUY_COMPANY_MESSAGE :{WHITE}我们正在寻找一家愿意收购我们的公司。{}{}您愿意收购 {COMPANY} ({CURRENCY_LONG}) 吗?
STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}当不受其欢迎地收购 {COMPANY} 时,您会买下其所有的资产,还清其所有的债务,并支付其两年的利润。{}{}总价预计为 {CURRENCY_LONG}.{}{}您想继续此收购吗?
# Company infrastructure window
STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY} 的设施
@ -3806,7 +3896,10 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}管理
STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}向所有在此列表中的运输工具发出指令
STR_VEHICLE_LIST_REPLACE_VEHICLES :替换车辆/飞机/船只
STR_VEHICLE_LIST_SEND_FOR_SERVICING :进行保养
STR_VEHICLE_LIST_CREATE_GROUP :创建分组
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}今年利润:{CURRENCY_LONG} (去年利润:{CURRENCY_LONG})
STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}]
STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING}
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :前往列车车库
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :前往汽车车库
@ -4517,7 +4610,7 @@ STR_TIMETABLE_CLEAR_SPEED :{BLACK}取消
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}清除高亮调度命令的最高限速。按住 Ctrl 键单击可以清除所有命令的最高限速
STR_TIMETABLE_RESET_LATENESS :{BLACK}清除晚点计数器
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}重置晚点计数器,从而使车辆准时到达
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}重置晚点计数器,从而使车辆被视为准时到达。CTRL+点击会重置全分组的计数器,从而使晚点最多的载具被视为准点而其他被视为早点
STR_TIMETABLE_AUTOFILL :{BLACK}自动填充
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}根据下一次运行的时间自动填充时间表。按住Ctrl单击可保持等候时间
@ -4526,6 +4619,8 @@ STR_TIMETABLE_EXPECTED :{BLACK}预期
STR_TIMETABLE_SCHEDULED :{BLACK}表定时间
STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}切换显示(根据实际情况计算的)预期时间或表定时间
STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY}
STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY}
# Date window (for timetable)
@ -4562,14 +4657,16 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}您使
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI调试窗口只对服务器可用
# AI configuration window
STR_AI_CONFIG_CAPTION_AI :{WHITE}AI
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}游戏脚本配置
STR_AI_CONFIG_CAPTION_AI :{WHITE}AI
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}游戏脚本设定
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}下局游戏将启用这些脚本
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}下局游戏将启用这些AI
STR_AI_CONFIG_HUMAN_PLAYER :玩家
STR_AI_CONFIG_RANDOM_AI :随机 AI
STR_AI_CONFIG_NONE :(无)
STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM}
STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}最大竞争对手个数:{ORANGE}{COMMA}
STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}竞争对手公司建立间隔: {ORANGE}{COMMA} 分钟
STR_AI_CONFIG_MOVE_UP :{BLACK}上移
STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}在列表中将选择的AI上移
@ -4582,7 +4679,7 @@ STR_AI_CONFIG_AI :{SILVER}AI
STR_AI_CONFIG_CHANGE_AI :{BLACK}选择 AI
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}选择游戏脚本
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}装在另一脚
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}载入另一脚本。CTRL+点击以显示所有可用版
STR_AI_CONFIG_CONFIGURE :{BLACK}设定
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}设定脚本参数
@ -4619,6 +4716,11 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
# Textfile window
STR_TEXTFILE_JUMPLIST :{WHITE}目录
STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}通过此列表快速访问想要查看的页面
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}退回到定位历史
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}取消定位历史撤回
STR_TEXTFILE_WRAP_TEXT :{WHITE}強迫文字换行
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}強迫宽于窗格的內文自动换行
STR_TEXTFILE_VIEW_README :{BLACK}查看说明
@ -4628,6 +4730,8 @@ STR_TEXTFILE_VIEW_LICENCE :{BLACK}版权
STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} {STRING} 的说明
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} {STRING} 的更新日志
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} {STRING} 的版权信息
STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}预览调查结果
STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD 文档 '{STRING}'
# Vehicle loading indicators
@ -4810,7 +4914,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}汽车
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}距离另一码头过近
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}距离另一机场过近
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}不能重命名车站
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}这是一条城镇所属的道路
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... 城镇所有的道路
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}道路方向不对
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... 途中型车站不能建在转角处
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... 不能在岔路口修建过路型站台
@ -5069,6 +5173,7 @@ STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... 飞
# Extra messages which go on the third line of errors, explaining why orders failed
STR_ERROR_NO_RAIL_STATION :{WHITE}没有火车站
STR_ERROR_NO_BUS_STATION :{WHITE}没有公交车站
STR_ERROR_NO_TRUCK_STATION :{WHITE}没有货车站
STR_ERROR_NO_DOCK :{WHITE}这里没有码头
STR_ERROR_NO_AIRPORT :{WHITE}没有机场/直升机场
STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}没有兼容此道路类型的站点
@ -5077,11 +5182,13 @@ STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}没有
STR_ERROR_AIRPORT_NO_PLANES :{WHITE}这架飞机不能降落在这个直升机场
STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}这架直升机不能降落在这个机场
STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}没有铁路路点
STR_ERROR_NO_BUOY :{WHITE}没有浮标
# Timetable related errors
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}不能给车辆编制时间表…
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}车辆只能在站内等候。
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}此车辆将不停靠本站。
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... 时间表不完整
# Sign related errors
STR_ERROR_TOO_MANY_SIGNS :{WHITE}……标志太多了
@ -5561,17 +5668,21 @@ STR_VEHICLE_NAME :{VEHICLE}
STR_WAYPOINT_NAME :{WAYPOINT}
STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
STR_JUST_CHECKMARK :{CHECKMARK}
STR_JUST_COMMA :{COMMA}
STR_JUST_CURRENCY_SHORT :{CURRENCY_SHORT}
STR_JUST_CURRENCY_LONG :{CURRENCY_LONG}
STR_JUST_CARGO_LIST :{CARGO_LIST}
STR_JUST_DECIMAL :{DECIMAL}
STR_JUST_INT :{NUM}
STR_JUST_DATE_TINY :{DATE_TINY}
STR_JUST_DATE_SHORT :{DATE_SHORT}
STR_JUST_DATE_LONG :{DATE_LONG}
STR_JUST_DATE_ISO :{DATE_ISO}
STR_JUST_STRING :{STRING}
STR_JUST_STRING1 :{STRING}
STR_JUST_STRING2 :{STRING}
STR_JUST_STRING_STRING :{STRING}{STRING}
STR_JUST_RAW_STRING :{STRING}
STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING}

@ -523,6 +523,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Xoá tất cả
# About menu
###length 11
STR_ABOUT_MENU_LAND_BLOCK_INFO :Thông tin vùng đất
STR_ABOUT_MENU_HELP :Trợ giúp & hướng dẫn
STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Bật/tắt bảng lệnh
STR_ABOUT_MENU_AI_DEBUG :Gỡ rối AI / Game script
@ -2124,6 +2125,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Nhiều
STR_INTRO_GAME_OPTIONS :{BLACK}Cấu Hình Trò Chơi
STR_INTRO_HIGHSCORE :{BLACK}Bảng điểm chơi cao nhất
STR_INTRO_HELP :{BLACK}Trợ giúp & hướng dẫn
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Thiết lập
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Thiết Lập NewGRF
STR_INTRO_ONLINE_CONTENT :{BLACK}Các Nội Dung Trên Mạng
@ -2145,6 +2147,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Chọn k
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Hiển thị cấu hình của trò chơi
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Hiện bảng điểm chơi cao nhất
STR_INTRO_TOOLTIP_HELP :{BLACK}Truy cập vào tài liệu và tài nguyên trực tuyến
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Thiết lập hiển thị
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Hiển thị tùy chỉnh NewGRF
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Kiểm tra những nội dung mới & cập nhật để tải về
@ -2167,6 +2170,17 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Bạn c
STR_ABANDON_SCENARIO_QUERY :{YELLOW}Bạn có chắc bạn muốn bỏ màn chơi kịch bản này?
# Help window
STR_HELP_WINDOW_CAPTION :{WHITE}Trợ giúp & hướng dẫn
STR_HELP_WINDOW_WEBSITES :{BLACK}Websites
STR_HELP_WINDOW_DOCUMENTS :{BLACK}Tài liệu
STR_HELP_WINDOW_README :{BLACK}Readme
STR_HELP_WINDOW_CHANGELOG :{BLACK}Lịch sử thay đổi
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Các lỗi đã biết
STR_HELP_WINDOW_LICENSE :{BLACK}Giấy phép
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Hướng dẫn / Wiki
STR_HELP_WINDOW_BUGTRACKER :{BLACK}Báo cáo lỗi
STR_HELP_WINDOW_COMMUNITY :{BLACK}Cộng đồng
# Cheat window
STR_CHEATS :{WHITE}Cheats
@ -3386,6 +3400,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Phân t
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} tại {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Đối Tượng
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Kiểu ray
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Loại đường
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Biến số NewGRF là 60+x (dạng hexa)
@ -4701,6 +4716,11 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
# Textfile window
STR_TEXTFILE_JUMPLIST :{WHITE}Danh mục
STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Dùng danh sách này để chuyển nhanh tới một phần trong tập tin được hiển thị
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Trở về trước trong lịch sử điều hướng
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Trở về sau trong lịch sử điều hướng
STR_TEXTFILE_WRAP_TEXT :{WHITE}Ép văn bản
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ép chữ cái vừa khung cửa sổ để khỏi phải cuộn chuột
STR_TEXTFILE_VIEW_README :{BLACK}Xem readme
@ -4711,6 +4731,7 @@ STR_TEXTFILE_README_CAPTION :{WHITE}Readme c
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Lịch sử thay đổi của {STRING} {STRING}
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Giấy phép của {STRING} {STRING}
STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Xem trước kết quả khảo sát
STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}Tài liệu OpenTTD '{STRING}'
# Vehicle loading indicators

@ -127,7 +127,7 @@ public:
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget != WID_PLT_BACKGROUND) return;
@ -175,7 +175,7 @@ public:
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (data == 0) {
/* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */
@ -354,7 +354,7 @@ public:
}
}
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
if (widget != WID_SLT_BACKGROUND) return;
@ -394,7 +394,7 @@ public:
}
}
void OnClick(Point pt, int widget, int click_count) override
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
{
if (widget != WID_SLT_BACKGROUND) return;
@ -411,7 +411,7 @@ public:
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
this->BuildTable();
this->ReInit();

@ -36,7 +36,7 @@ public:
* Call the demand calculator on the given component.
* @param job Component to calculate the demands for.
*/
virtual void Run(LinkGraphJob &job) const { DemandCalculator c(job); }
void Run(LinkGraphJob &job) const override { DemandCalculator c(job); }
/**
* Virtual destructor has to be defined because of virtual Run().

@ -28,7 +28,7 @@ public:
* values. Only do that on the very last flow mapping.
*/
FlowMapper(bool scale) : scale(scale) {}
virtual void Run(LinkGraphJob &job) const;
void Run(LinkGraphJob &job) const override;
private:

@ -16,7 +16,7 @@ public:
* Initialize the link graph job.
* @param job Job to be initialized.
*/
virtual void Run(LinkGraphJob &job) const { job.Init(); }
void Run(LinkGraphJob &job) const override { job.Init(); }
};
#endif /* INIT_H */

@ -306,7 +306,7 @@ public:
}
/** Bare constructor, only for save/load. */
LinkGraph() : cargo(INVALID_CARGO), last_compression(0) {}
LinkGraph() : cargo(CT_INVALID), last_compression(0) {}
/**
* Real constructor.
* @param cargo Cargo the link graph is about.

@ -760,7 +760,7 @@ void LinkGraphLegendWindow::SetOverlay(LinkGraphOverlay *overlay) {
}
}
void LinkGraphLegendWindow::UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
void LinkGraphLegendWindow::UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize)
{
if (IsInsideMM(widget, WID_LGL_SATURATION_FIRST, WID_LGL_SATURATION_LAST + 1)) {
StringID str = STR_NULL;
@ -819,7 +819,7 @@ void LinkGraphLegendWindow::DrawWidget(const Rect &r, int widget) const
}
}
bool LinkGraphLegendWindow::OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond)
bool LinkGraphLegendWindow::OnTooltip([[maybe_unused]] Point, int widget, TooltipCloseCondition close_cond)
{
if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) {
if (this->IsWidgetDisabled(widget)) {
@ -867,7 +867,7 @@ void LinkGraphLegendWindow::UpdateOverlayCargoes()
this->overlay->SetCargoMask(mask);
}
void LinkGraphLegendWindow::OnClick(Point pt, int widget, int click_count)
void LinkGraphLegendWindow::OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count)
{
/* Check which button is clicked */
if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) {
@ -899,7 +899,7 @@ void LinkGraphLegendWindow::OnClick(Point pt, int widget, int click_count)
* @param data ignored
* @param gui_scope ignored
*/
void LinkGraphLegendWindow::OnInvalidateData(int data, bool gui_scope)
void LinkGraphLegendWindow::OnInvalidateData([[maybe_unused]] int data, [[maybe_unused]] bool gui_scope)
{
if (this->num_cargo != _sorted_cargo_specs.size()) {
this->Close();

@ -128,10 +128,10 @@ public:
LinkGraphLegendWindow(WindowDesc *desc, int window_number);
void SetOverlay(LinkGraphOverlay *overlay);
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override;
void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override;
void DrawWidget(const Rect &r, int widget) const override;
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override;
void OnClick(Point pt, int widget, int click_count) override;
bool OnTooltip([[maybe_unused]] Point pt, int widget, TooltipCloseCondition close_cond) override;
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override;
void OnInvalidateData(int data = 0, bool gui_scope = true) override;
private:

@ -129,10 +129,9 @@ public:
/**
* Setup the node to start iterating at.
* @param source Unused.
* @param node Node to start iterating at.
*/
void SetNode(NodeID source, NodeID node)
void SetNode(NodeID, NodeID node)
{
Node node_anno = this->job[node];
this->i = node_anno.GetEdges().begin();
@ -232,7 +231,7 @@ public:
* @return True if base + the new edge would be better than the path associated
* with this annotation.
*/
bool DistanceAnnotation::IsBetter(const DistanceAnnotation *base, uint cap,
bool DistanceAnnotation::IsBetter(const DistanceAnnotation *base, uint,
int free_cap, uint dist) const
{
/* If any of the paths is disconnected, the other one is better. If both

@ -81,7 +81,7 @@ public:
* Run the calculation.
* @param graph Component to be calculated.
*/
virtual void Run(LinkGraphJob &job) const { Tpass pass(job); }
void Run(LinkGraphJob &job) const override { Tpass pass(job); }
};
#endif /* MCF_H */

@ -515,7 +515,7 @@ struct MainWindow : Window
}
}
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override
bool OnTooltip([[maybe_unused]] Point pt, int widget, TooltipCloseCondition close_cond) override
{
if (widget != WID_M_VIEWPORT) return false;
return this->viewport->overlay->ShowTooltip(pt, close_cond);
@ -526,7 +526,7 @@ struct MainWindow : Window
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (!gui_scope) return;
/* Forward the message to the appropriate toolbar (ingame or scenario editor) */

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save