diff --git a/CMakeLists.txt b/CMakeLists.txt index 5398dde0c2..7046f5e40e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,6 +137,9 @@ if(WIN32) list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/ottdres.rc") endif() +# An empty target for the tools +add_custom_target(tools) + include(SourceList) include(Endian) add_endian_definition() @@ -226,7 +229,7 @@ include(LinkPackage) link_package(PNG TARGET PNG::PNG ENCOURAGED) link_package(ZLIB TARGET ZLIB::ZLIB ENCOURAGED) link_package(LIBLZMA TARGET LibLZMA::LibLZMA ENCOURAGED) -link_package(LZO ENCOURAGED) +link_package(LZO) link_package(XDG_basedir) if(NOT OPTION_DEDICATED) diff --git a/cmake/Options.cmake b/cmake/Options.cmake index 0167ad0a6c..005bb19cae 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -35,6 +35,8 @@ function(set_directory_options) set(GLOBAL_DIR "${DEFAULT_GLOBAL_DIR}" CACHE STRING "Global directory") message(STATUS "Detecting Global Data directory - ${GLOBAL_DIR}") endif() + + set(HOST_BINARY_DIR "" CACHE PATH "Full path to native cmake build directory") endfunction() # Set some generic options that influence what is being build. diff --git a/docs/landscape.html b/docs/landscape.html index 0442a72ff1..07609d4a85 100644 --- a/docs/landscape.html +++ b/docs/landscape.html @@ -829,7 +829,7 @@ 4  - on snow with rough land underneed + on snow with rough land underneath diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 8e1f36f0e5..9413a1898d 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -922,7 +922,11 @@ static bool AircraftController(Aircraft *v) v->cur_speed = 0; if (--u->cur_speed == 32) { if (!PlayVehicleSound(v, VSE_START)) { - SndPlayVehicleFx(SND_18_HELICOPTER, v); + SoundID sfx = AircraftVehInfo(v->engine_type)->sfx; + /* For compatibility with old NewGRF we ignore the sfx property, unless a NewGRF-defined sound is used. + * The baseset has only one helicopter sound, so this only limits using plane or cow sounds. */ + if (sfx < ORIGINAL_SAMPLE_COUNT) sfx = SND_18_HELICOPTER; + SndPlayVehicleFx(sfx, v); } } } else { diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 68d9e5b51a..a0f040d1aa 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -253,7 +253,7 @@ bool HandleBootstrap() if (_exit_game) return false; /* Try to probe the graphics. Should work this time. */ - if (!BaseGraphics::SetSet("")) goto failure; + if (!BaseGraphics::SetSet({})) goto failure; /* Finally we can continue heading for the menu. */ _game_mode = GM_MENU; diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 3df2b61734..4d1e9dc59f 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1903,10 +1903,10 @@ DEF_CONSOLE_CMD(ConContent) } if (argc <= 1) { - IConsoleHelp("Query, select and download content. Usage: 'content update|upgrade|select [all|id]|unselect [all|id]|state [filter]|download'"); + IConsoleHelp("Query, select and download content. Usage: 'content update|upgrade|select [id]|unselect [all|id]|state [filter]|download'"); IConsoleHelp(" update: get a new list of downloadable content; must be run first"); IConsoleHelp(" upgrade: select all items that are upgrades"); - IConsoleHelp(" select: select a specific item given by its id or 'all' to select all. If no parameter is given, all selected content will be listed"); + IConsoleHelp(" select: select a specific item given by its id. If no parameter is given, all selected content will be listed"); IConsoleHelp(" unselect: unselect a specific item given by its id or 'all' to unselect all"); IConsoleHelp(" state: show the download/select state of all downloadable content. Optionally give a filter string"); IConsoleHelp(" download: download all content you've selected"); @@ -1932,7 +1932,13 @@ DEF_CONSOLE_CMD(ConContent) OutputContentState(*iter); } } else if (strcasecmp(argv[2], "all") == 0) { - _network_content_client.SelectAll(); + /* The intention of this function was that you could download + * everything after a filter was applied; but this never really + * took off. Instead, a select few people used this functionality + * to download every available package on BaNaNaS. This is not in + * the spirit of this service. Additionally, these few people were + * good for 70% of the consumed bandwidth of BaNaNaS. */ + IConsolePrintF(CC_ERROR, "'select all' is no longer supported since 1.11"); } else { _network_content_client.Select((ContentID)atoi(argv[2])); } diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index a371305999..7efcb1abfc 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -117,6 +117,7 @@ static void LoadGrfFileIndexed(const char *filename, const SpriteID *index_tbl, do { bool b = LoadNextSprite(start, file_index, sprite_id, container_ver); + (void)b; // Unused without asserts assert(b); sprite_id++; } while (++start <= end); diff --git a/src/lang/CMakeLists.txt b/src/lang/CMakeLists.txt index 90ee22931d..1a8191f82e 100644 --- a/src/lang/CMakeLists.txt +++ b/src/lang/CMakeLists.txt @@ -59,6 +59,10 @@ set(LANG_SOURCE_FILES set(LANG_BINARY_DIR ${CMAKE_BINARY_DIR}/lang) +if (HOST_BINARY_DIR) + include(${HOST_BINARY_DIR}/strgen.cmake) +endif() + # Walk over all the (finished) language files, and generate a command to compile them foreach(LANG_SOURCE_FILE IN LISTS LANG_SOURCE_FILES) get_filename_component(LANG_SOURCE_FILE_NAME_WE ${LANG_SOURCE_FILE} NAME_WE) diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index e6580df72e..94c2032527 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -837,6 +837,7 @@ STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Nėra muzikos STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}„{STRING}“ STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Takelis STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Pavadinimas @@ -2790,6 +2791,7 @@ STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Krovinys STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Geležinkelių greičio limitas: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Kelio greičio limitas: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tramvajaus greičio limitas: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Akmenys @@ -2917,6 +2919,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Žaidimo STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nėra informacijos STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}Plėtiniai: {WHITE}{STRING} +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Perrašyti bylą STR_SAVELOAD_OSKTITLE :{BLACK}Įveskite išsaugomo žaidimo vardą @@ -3238,6 +3241,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Paperka # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Tikslai STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globalūs tikslai +STR_GOALS_SPECTATOR :Visuotiniai tikslai STR_GOALS_GLOBAL_TITLE :{BLACK}Visuotiniai tikslai: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nieko - @@ -3553,6 +3557,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Iškelti visas STR_GROUP_RENAME_CAPTION :{BLACK}Pervadinti grupę +STR_GROUP_PROFIT_THIS_YEAR :Šio mėnesio pelnas: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nauji lokomotyvai diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index d3a049cb33..34a8f93456 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1553,11 +1553,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Året der avisa STR_CONFIG_SETTING_STARTING_YEAR :Start spillet i år: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Poengsum ved slutten av året: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Året spillet slutter med tanke på poeng. På slutten av dette året, vil firmaets poengsum bli lagret og tavlen med høyeste poengsummer vil vises. Spilleren kan fortsette å spille etter dette.{}Hvis dette er før start året, vil tavlen med høyeste poengsummer aldri vises. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldri STR_CONFIG_SETTING_SMOOTH_ECONOMY :Jevn økonomi (flere, mindre endringer): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Når denne er aktivert, endrer industriproduksjonen seg oftere, og i mindre trinn. Denne innstillingen har vanligvis ingen effekt hvis industriene er fra en NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Tillat aksjekjøp i andre firmaer: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Når aktivert, tillates kjøp og salg av selskapers aksjer. Aksjer vil kun være tilgjengelig selskaper som når en viss alder +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Sett minimum levetid for et selskap, før andre kan kjøpe og selge aksjer fra dem. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prosentandel av etappe-overskudd som skal betales i innmatingssystem: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Andel av inntekten gitt til de mellomliggende etapper i et overføringssystem, noe som gir mer kontroll over inntektene STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Når du drar en linje, plasser signaler hver: {STRING} @@ -2166,6 +2168,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Feil pas STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Tjeneren er full STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du er bannlyst fra denne tjeneren STR_NETWORK_ERROR_KICKED :{WHITE}Du ble kastet ut av spillet +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Grunn: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Juksing er ikke tillatt på denne tjeneren STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Du sendte for mange kommandoer til serveren STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Du brukte for lang tid på å skrive inn passordet @@ -3123,6 +3126,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Endre bynavnet # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN}s bystyre STR_LOCAL_AUTHORITY_ZONE :{BLACK}Område +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Vis zonene innenfor de lokale myndigheters grenser STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Vurdering av transportfirma: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Handlinger tilgjengelig: @@ -3395,6 +3399,8 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industri STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ingen - STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportert){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} og {NUM} flere... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrinavn - klikk på navn for å gå til industri. Ctrl+klikk åpner et nytt tilleggsvindu over industrien @@ -4180,8 +4186,10 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikke end STR_SCREENSHOT_CAPTION :WHITE}Ta skjermbilde STR_SCREENSHOT_SCREENSHOT :{BLACK}Normalt skjermbilde STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Skjermbilde med maksimal zoom +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Standard zoomet skjermbilde STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Skjermbilde av hele kartat STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Høydekart skjermbilde +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Oversiktskart skjermbilde # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index ba9f0e1b50..8bffc80fde 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -446,7 +446,7 @@ static bool FixTTOEngines() e->preview_company = INVALID_COMPANY; e->preview_asked = (CompanyMask)-1; e->preview_wait = 0; - e->name = nullptr; + e->name = std::string{}; } return true; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index ae6615ed93..adfd10b2cf 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1941,7 +1941,7 @@ void SlObject(void *object, const SaveLoad *sld) } for (; sld->cmd != SL_END; sld++) { - void *ptr = sld->global ? sld->address : GetVariableAddress(object, sld); + void *ptr = GetVariableAddress(object, sld); SlObjectMember(ptr, sld); } } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 07830ffb73..d5df5b47b9 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -1038,7 +1038,18 @@ static inline bool IsNumericType(VarType conv) */ static inline void *GetVariableAddress(const void *object, const SaveLoad *sld) { - return const_cast((const byte*)(sld->global ? nullptr : object) + (ptrdiff_t)sld->address); + /* Entry is a global address. */ + if (sld->global) return sld->address; + + /* Entry is a null-variable, mostly used to read old savegames etc. */ + if (GetVarMemType(sld->conv) == SLE_VAR_NULL) { + assert(sld->address == nullptr); + return nullptr; + } + + /* Everything else should be a non-null pointer. */ + assert(object != nullptr); + return const_cast((const byte *)object + (ptrdiff_t)sld->address); } int64 ReadValue(const void *ptr, VarType conv); diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp index bea0edbc88..2250560110 100644 --- a/src/script/squirrel.cpp +++ b/src/script/squirrel.cpp @@ -485,7 +485,7 @@ void Squirrel::Initialize() /* Handle compile-errors ourself, so we can display it nicely */ sq_setcompilererrorhandler(this->vm, &Squirrel::CompileError); - sq_notifyallexceptions(this->vm, SQTrue); + sq_notifyallexceptions(this->vm, _debug_script_level > 5); /* Set a good print-function */ sq_setprintfunc(this->vm, &Squirrel::PrintFunc); /* Handle runtime-errors ourself, so we can display it nicely */ diff --git a/src/settings.cpp b/src/settings.cpp index 6600730e52..31d6180a55 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -2340,6 +2340,7 @@ uint GetCompanySettingIndex(const char *name) { uint i; const SettingDesc *sd = GetSettingFromName(name, &i); + (void)sd; // Unused without asserts assert(sd != nullptr && (sd->desc.flags & SGF_PER_COMPANY) != 0); return i; } @@ -2450,6 +2451,7 @@ void IConsoleSetSetting(const char *name, int value) { uint index; const SettingDesc *sd = GetSettingFromName(name, &index); + (void)sd; // Unused without asserts assert(sd != nullptr); SetSettingValue(index, value); } diff --git a/src/settingsgen/CMakeLists.txt b/src/settingsgen/CMakeLists.txt index e17b8ad6bf..69b2092017 100644 --- a/src/settingsgen/CMakeLists.txt +++ b/src/settingsgen/CMakeLists.txt @@ -1,13 +1,18 @@ cmake_minimum_required(VERSION 3.5) -project(settingsgen) +if (NOT HOST_BINARY_DIR) + project(settingsgen) -set(sourcefiles - settingsgen.cpp - ../core/alloc_func.cpp - ../misc/getoptdata.cpp - ../ini_load.cpp - ../string.cpp -) -add_definitions(-DSETTINGSGEN) -add_executable(settingsgen ${sourcefiles}) + set(sourcefiles + settingsgen.cpp + ../core/alloc_func.cpp + ../misc/getoptdata.cpp + ../ini_load.cpp + ../string.cpp + ) + add_definitions(-DSETTINGSGEN) + add_executable(settingsgen ${sourcefiles}) + + export(TARGETS settingsgen FILE ${CMAKE_BINARY_DIR}/settingsgen.cmake) + add_dependencies(tools settingsgen) +endif() diff --git a/src/strgen/CMakeLists.txt b/src/strgen/CMakeLists.txt index b8f61cde3b..c638b5c6e7 100644 --- a/src/strgen/CMakeLists.txt +++ b/src/strgen/CMakeLists.txt @@ -1,22 +1,26 @@ cmake_minimum_required(VERSION 3.5) -project(strgen) +if (NOT HOST_BINARY_DIR) + project(strgen) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake") + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake") -set(sourcefiles - strgen.cpp - strgen_base.cpp - ../core/alloc_func.cpp - ../misc/getoptdata.cpp - ../string.cpp -) -add_definitions(-DSTRGEN) -add_executable(strgen ${sourcefiles}) + set(sourcefiles + strgen.cpp + strgen_base.cpp + ../core/alloc_func.cpp + ../misc/getoptdata.cpp + ../string.cpp + ) + add_definitions(-DSTRGEN) + add_executable(strgen ${sourcefiles}) -include(Endian) -add_endian_definition() + include(Endian) + add_endian_definition() + export(TARGETS strgen FILE ${CMAKE_BINARY_DIR}/strgen.cmake) + add_dependencies(tools strgen) +endif() # Source Files add_files(strgen_base.cpp) diff --git a/src/table/CMakeLists.txt b/src/table/CMakeLists.txt index ef0b32fdeb..eb76c53bcd 100644 --- a/src/table/CMakeLists.txt +++ b/src/table/CMakeLists.txt @@ -11,6 +11,10 @@ set(TABLE_INI_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/window_settings.ini ) +if (HOST_BINARY_DIR) + include(${HOST_BINARY_DIR}/settingsgen.cmake) +endif() + # Generate a command and target to create the settings table add_custom_command_timestamp(OUTPUT ${TABLE_BINARY_DIR}/settings.h COMMAND ${CMAKE_COMMAND} -E make_directory ${TABLE_BINARY_DIR} diff --git a/src/window.cpp b/src/window.cpp index 1d940e338a..08d884f72f 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1407,6 +1407,7 @@ static void AddWindowToZOrdering(Window *w) /* Search down the z-ordering for its location. */ WindowBase *v = _z_front_window; uint last_z_priority = UINT_MAX; + (void)last_z_priority; // Unused without asserts while (v != nullptr && (v->window_class == WC_INVALID || GetWindowZPriority(v->window_class) > GetWindowZPriority(w->window_class))) { if (v->window_class != WC_INVALID) { /* Sanity check z-ordering, while we're at it. */