From be23283677c9c24c1b79fdf07c773e27beb12b62 Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Wed, 23 Nov 2022 14:30:36 +0400 Subject: [PATCH] Update to 13.0-beta1 --- .changelog | 105 +- .github/workflows/ci-build.yml | 22 +- .github/workflows/commit-checker.yml | 2 +- .github/workflows/preview_build.yml | 4 +- .github/workflows/preview_label.yml | 2 +- .github/workflows/preview_push.yml | 2 +- .github/workflows/release.yml | 244 +++- .github/workflows/unused-strings.yml | 2 +- .ottdrev | 2 +- .release_date | 2 +- .version | 2 +- CMakeLists.txt | 2 +- CONTRIBUTING.md | 8 +- CREDITS.md | 26 +- README.md | 30 +- bin/ai/compat_0.7.nut | 13 + bin/ai/compat_1.0.nut | 13 + bin/ai/compat_1.1.nut | 13 + bin/ai/compat_1.10.nut | 13 + bin/ai/compat_1.11.nut | 13 + bin/ai/compat_1.2.nut | 13 + bin/ai/compat_1.3.nut | 13 + bin/ai/compat_1.4.nut | 13 + bin/ai/compat_1.5.nut | 13 + bin/ai/compat_1.6.nut | 13 + bin/ai/compat_1.7.nut | 13 + bin/ai/compat_1.8.nut | 13 + bin/ai/compat_1.9.nut | 13 + bin/ai/compat_12.nut | 15 + bin/ai/compat_13.nut | 6 + bin/game/compat_1.10.nut | 13 + bin/game/compat_1.11.nut | 13 + bin/game/compat_1.2.nut | 13 + bin/game/compat_1.3.nut | 13 + bin/game/compat_1.4.nut | 12 + bin/game/compat_1.5.nut | 13 + bin/game/compat_1.6.nut | 13 + bin/game/compat_1.7.nut | 13 + bin/game/compat_1.8.nut | 13 + bin/game/compat_1.9.nut | 13 + bin/game/compat_12.nut | 15 + bin/game/compat_13.nut | 6 + changelog.txt | 85 ++ cmake/CompileFlags.cmake | 5 + cmake/InstallAndPackage.cmake | 8 +- cmake/LinkPackage.cmake | 2 +- cmake/MSVCFilters.cmake | 1 + cmake/Options.cmake | 2 +- cmake/PackageRPM.cmake | 1 + cmake/scripts/GenerateWidget.cmake | 5 + cmake/scripts/Regression.cmake | 1 + cmake/scripts/SquirrelIncludes.cmake | 29 +- media/baseset/openttd.grf | Bin 510635 -> 508716 bytes media/baseset/openttd/flags.nfo | 43 - media/baseset/openttd/flags.png | Bin 1763 -> 0 bytes media/baseset/openttd/openttd.nfo | 1 - media/baseset/opntitle.dat | Bin 259680 -> 138710 bytes media/openttd.desktop | 2 +- os/windows/openttd.manifest | 1 + os/windows/winstore/generate-assets.bat | 2 + os/windows/winstore/generate-assets.ps1 | 48 + os/windows/winstore/generate-key.bat | 2 + os/windows/winstore/generate-key.ps1 | 21 + .../manifests/AssetsPackage.appxmanifest | 68 + .../winstore/manifests/Package.appxmanifest | 83 ++ .../winstore/manifests/PackagingLayout.xml | 35 + os/windows/winstore/prepare-manifests.bat | 2 + os/windows/winstore/prepare-manifests.ps1 | 42 + os/windows/winstore/set-version.bat | 14 + os/windows/winstore/set-version.ps1 | 23 + regression/regression/info.nut | 2 +- regression/regression/main.nut | 25 + regression/regression/result.txt | 60 +- regression/stationlist/info.nut | 2 +- src/CMakeLists.txt | 42 +- src/ai/ai.hpp | 4 +- src/ai/ai_core.cpp | 8 +- src/ai/ai_gui.cpp | 21 +- src/ai/ai_info.cpp | 2 +- src/ai/ai_instance.cpp | 13 +- src/ai/ai_instance.hpp | 2 +- src/aircraft.h | 2 +- src/aircraft_cmd.cpp | 24 +- src/aircraft_cmd.h | 19 + src/aircraft_gui.cpp | 2 +- src/airport_cmd.h | 17 + src/airport_gui.cpp | 58 +- src/autoreplace_cmd.cpp | 79 +- src/autoreplace_cmd.h | 24 + src/autoreplace_gui.cpp | 21 +- src/blitter/32bpp_anim_sse2.cpp | 1 + src/blitter/32bpp_anim_sse2.hpp | 4 + src/blitter/32bpp_anim_sse4.cpp | 16 +- src/blitter/32bpp_anim_sse4.hpp | 9 +- src/blitter/32bpp_sse2.hpp | 4 + src/blitter/32bpp_sse4.hpp | 4 + src/blitter/32bpp_sse_func.hpp | 36 +- src/blitter/32bpp_sse_type.h | 1 + src/blitter/32bpp_ssse3.hpp | 4 + src/blitter/CMakeLists.txt | 15 - src/bootstrap_gui.cpp | 6 +- src/bridge_gui.cpp | 51 +- src/build_vehicle_gui.cpp | 26 +- src/cargomonitor.cpp | 6 +- src/cargopacket.cpp | 2 +- src/cargotype.h | 3 +- src/cheat_gui.cpp | 3 +- src/clear_cmd.cpp | 3 +- src/cmd_helper.h | 34 - src/command.cpp | 746 +++-------- src/command_func.h | 488 +++++++- src/command_type.h | 117 +- src/company_base.h | 7 +- src/company_cmd.cpp | 141 ++- src/company_cmd.h | 34 + src/company_func.h | 3 +- src/company_gui.cpp | 385 +++--- src/company_type.h | 7 +- src/console.cpp | 1 + src/console_cmds.cpp | 161 ++- src/console_gui.cpp | 149 +-- src/core/CMakeLists.txt | 2 + src/core/enum_type.hpp | 18 +- src/core/math_func.hpp | 2 +- src/core/overflowsafe_type.hpp | 9 +- src/core/span_type.hpp | 6 +- src/core/strong_typedef_type.hpp | 73 ++ src/crashlog.cpp | 2 +- src/date.cpp | 2 +- src/date_func.h | 2 +- src/date_gui.cpp | 11 +- src/date_gui.h | 4 +- src/debug.cpp | 42 +- src/debug.h | 4 +- src/depot_cmd.cpp | 9 +- src/depot_cmd.h | 22 + src/depot_gui.cpp | 38 +- src/depot_type.h | 4 + src/direction_type.h | 4 +- src/disaster_vehicle.cpp | 7 +- src/dock_cmd.h | 18 + src/dock_gui.cpp | 63 +- src/economy.cpp | 162 ++- src/economy_cmd.h | 24 + src/economy_type.h | 10 +- src/engine.cpp | 48 +- src/engine_cmd.h | 25 + src/engine_gui.cpp | 3 +- src/fios_gui.cpp | 124 +- src/fontcache.cpp | 625 +--------- src/fontcache.h | 37 +- src/fontcache/CMakeLists.txt | 11 + src/fontcache/freetypefontcache.cpp | 330 +++++ src/fontcache/spritefontcache.cpp | 127 ++ src/fontcache/spritefontcache.h | 38 + src/fontcache/truetypefontcache.cpp | 180 +++ .../truetypefontcache.h} | 13 +- src/fontdetection.h | 2 +- src/framerate_gui.cpp | 12 +- src/game/game.hpp | 4 +- src/game/game_core.cpp | 8 +- src/game/game_info.cpp | 2 +- src/game/game_instance.cpp | 13 +- src/game/game_instance.hpp | 2 +- src/gamelog_internal.h | 2 +- src/genworld.cpp | 3 +- src/genworld_gui.cpp | 26 +- src/gfx.cpp | 36 +- src/gfx_func.h | 12 + src/gfx_type.h | 2 +- src/goal.cpp | 134 +- src/goal_cmd.h | 32 + src/goal_gui.cpp | 7 +- src/goal_type.h | 3 +- src/graph_gui.cpp | 15 +- src/group.h | 2 - src/group_cmd.cpp | 160 +-- src/group_cmd.h | 47 + src/group_gui.cpp | 85 +- src/highscore_gui.cpp | 9 +- src/industry_cmd.cpp | 187 +-- src/industry_cmd.h | 28 + src/industry_gui.cpp | 73 +- src/landscape.cpp | 233 +++- src/landscape_cmd.h | 21 + src/lang/afrikaans.txt | 23 +- src/lang/arabic_egypt.txt | 114 +- src/lang/basque.txt | 23 +- src/lang/belarusian.txt | 23 +- src/lang/brazilian_portuguese.txt | 68 +- src/lang/bulgarian.txt | 23 +- src/lang/catalan.txt | 129 +- src/lang/chuvash.txt | 12 +- src/lang/croatian.txt | 23 +- src/lang/czech.txt | 58 +- src/lang/danish.txt | 27 +- src/lang/dutch.txt | 224 ++-- src/lang/english.txt | 90 +- src/lang/english_AU.txt | 620 +++++++++- src/lang/english_US.txt | 98 +- src/lang/esperanto.txt | 22 +- src/lang/estonian.txt | 143 ++- src/lang/faroese.txt | 23 +- src/lang/finnish.txt | 164 +-- src/lang/french.txt | 128 +- src/lang/frisian.txt | 457 ++++--- src/lang/gaelic.txt | 23 +- src/lang/galician.txt | 86 +- src/lang/german.txt | 144 ++- src/lang/greek.txt | 33 +- src/lang/hebrew.txt | 23 +- src/lang/hindi.txt | 31 +- src/lang/hungarian.txt | 70 +- src/lang/icelandic.txt | 23 +- src/lang/ido.txt | 12 +- src/lang/indonesian.txt | 76 +- src/lang/irish.txt | 24 +- src/lang/italian.txt | 568 +++++---- src/lang/japanese.txt | 81 +- src/lang/korean.txt | 136 +- src/lang/latin.txt | 23 +- src/lang/latvian.txt | 78 +- src/lang/lithuanian.txt | 23 +- src/lang/luxembourgish.txt | 23 +- src/lang/macedonian.txt | 12 +- src/lang/malay.txt | 22 +- src/lang/maltese.txt | 12 +- src/lang/marathi.txt | 15 +- src/lang/norwegian_bokmal.txt | 27 +- src/lang/norwegian_nynorsk.txt | 23 +- src/lang/persian.txt | 34 +- src/lang/polish.txt | 364 +++--- src/lang/portuguese.txt | 106 +- src/lang/romanian.txt | 93 +- src/lang/russian.txt | 262 ++-- src/lang/serbian.txt | 23 +- src/lang/simplified_chinese.txt | 77 +- src/lang/slovak.txt | 43 +- src/lang/slovenian.txt | 23 +- src/lang/spanish.txt | 258 ++-- src/lang/spanish_MX.txt | 827 +++++++------ src/lang/swedish.txt | 108 +- src/lang/tamil.txt | 52 +- src/lang/thai.txt | 25 +- src/lang/traditional_chinese.txt | 1094 ++++++++++------- src/lang/turkish.txt | 99 +- src/lang/ukrainian.txt | 42 +- src/lang/urdu.txt | 16 +- src/lang/vietnamese.txt | 108 +- src/lang/welsh.txt | 31 +- src/linkgraph/linkgraph.cpp | 11 +- src/linkgraph/linkgraph_gui.cpp | 118 +- src/linkgraph/linkgraph_gui.h | 20 +- src/linkgraph/linkgraphschedule.cpp | 5 +- src/linkgraph/refresh.cpp | 33 +- src/livery.h | 2 +- src/main_gui.cpp | 21 +- src/map.cpp | 2 +- src/map_func.h | 16 +- src/map_type.h | 8 +- src/misc/CMakeLists.txt | 1 + src/misc/endian_buffer.hpp | 213 ++++ src/misc_cmd.cpp | 97 +- src/misc_cmd.h | 36 + src/misc_gui.cpp | 30 +- src/music_gui.cpp | 4 +- src/network/core/config.h | 2 +- src/network/core/packet.cpp | 28 + src/network/core/packet.h | 2 + src/network/core/tcp.h | 12 +- src/network/core/tcp_admin.h | 3 +- src/network/core/tcp_connect.cpp | 28 +- src/network/network.cpp | 32 +- src/network/network_admin.cpp | 19 +- src/network/network_chat_gui.cpp | 2 +- src/network/network_client.cpp | 3 +- src/network/network_command.cpp | 328 ++++- src/network/network_content_gui.cpp | 10 +- src/network/network_gui.cpp | 70 +- src/network/network_internal.h | 13 +- src/network/network_server.cpp | 19 +- src/newgrf.cpp | 44 +- src/newgrf_animation_base.h | 2 +- src/newgrf_config.cpp | 9 + src/newgrf_engine.cpp | 23 +- src/newgrf_engine.h | 16 +- src/newgrf_object.h | 2 + src/newgrf_profiling.cpp | 4 +- src/newgrf_profiling.h | 4 +- src/newgrf_railtype.cpp | 2 +- src/newgrf_roadtype.cpp | 15 +- src/newgrf_roadtype.h | 12 +- src/newgrf_station.cpp | 6 +- src/news_cmd.h | 21 + src/news_gui.cpp | 54 +- src/news_type.h | 5 +- src/object_cmd.cpp | 97 +- src/object_cmd.h | 22 + src/object_gui.cpp | 42 +- src/openttd.cpp | 56 +- src/order_backup.cpp | 22 +- src/order_base.h | 9 +- src/order_cmd.cpp | 174 +-- src/order_cmd.h | 46 + src/order_gui.cpp | 50 +- src/order_type.h | 6 +- src/os/macosx/font_osx.cpp | 18 +- src/os/macosx/font_osx.h | 2 +- src/os/unix/font_unix.cpp | 6 +- src/os/windows/font_win32.cpp | 37 +- src/os/windows/font_win32.h | 2 +- src/pathfinder/yapf/yapf.h | 3 +- src/pathfinder/yapf/yapf_destrail.hpp | 12 + src/pathfinder/yapf/yapf_rail.cpp | 22 +- src/rail_cmd.cpp | 466 ++++--- src/rail_cmd.h | 45 + src/rail_gui.cpp | 217 ++-- src/rev.cpp.in | 8 +- src/road.cpp | 2 +- src/road_cmd.cpp | 177 ++- src/road_cmd.h | 18 + src/road_gui.cpp | 197 ++- src/road_map.h | 22 +- src/road_type.h | 16 +- src/roadveh.h | 2 +- src/roadveh_cmd.cpp | 44 +- src/roadveh_cmd.h | 23 + src/saveload/afterload.cpp | 36 +- src/saveload/gamelog_sl.cpp | 3 +- src/saveload/misc_sl.cpp | 3 +- src/saveload/oldloader_sl.cpp | 6 +- src/saveload/saveload.h | 6 +- src/saveload/vehicle_sl.cpp | 19 +- src/screenshot.cpp | 44 +- src/script/CMakeLists.txt | 1 + src/script/api/CMakeLists.txt | 6 +- src/script/api/ai_changelog.hpp | 12 + src/script/api/game_changelog.hpp | 12 + src/script/api/script_airport.cpp | 8 +- src/script/api/script_basestation.cpp | 8 +- src/script/api/script_bridge.cpp | 32 +- src/script/api/script_cargo.cpp | 6 + src/script/api/script_cargo.hpp | 10 + src/script/api/script_company.cpp | 32 +- src/script/api/script_company.hpp | 28 +- src/script/api/script_controller.cpp | 3 +- src/script/api/script_engine.cpp | 5 +- src/script/api/script_event_types.cpp | 6 +- src/script/api/script_game.cpp | 5 +- src/script/api/script_gamesettings.cpp | 3 +- src/script/api/script_goal.cpp | 17 +- src/script/api/script_group.cpp | 25 +- src/script/api/script_industry.cpp | 9 +- src/script/api/script_industrytype.cpp | 13 +- src/script/api/script_industrytype.hpp | 9 + src/script/api/script_marine.cpp | 27 +- src/script/api/script_news.cpp | 3 +- src/script/api/script_object.cpp | 125 +- src/script/api/script_object.hpp | 182 ++- src/script/api/script_objecttype.cpp | 11 +- src/script/api/script_objecttype.hpp | 9 + src/script/api/script_order.cpp | 45 +- src/script/api/script_rail.cpp | 82 +- src/script/api/script_road.cpp | 40 +- src/script/api/script_sign.cpp | 7 +- src/script/api/script_station.cpp | 3 +- src/script/api/script_story_page.cpp | 33 +- src/script/api/script_subsidy.cpp | 3 +- src/script/api/script_tile.cpp | 15 +- src/script/api/script_town.cpp | 17 +- src/script/api/script_tunnel.cpp | 28 +- src/script/api/script_types.hpp | 2 +- src/script/api/script_vehicle.cpp | 39 +- src/script/api/script_viewport.cpp | 7 +- src/script/api/script_window.hpp.in | 59 +- src/script/script_cmd.h | 18 + src/script/script_instance.cpp | 20 +- src/script/script_instance.hpp | 8 +- src/script/script_scanner.cpp | 9 +- src/script/script_scanner.hpp | 2 +- src/script/script_storage.hpp | 21 +- src/script/squirrel_helper.hpp | 633 +--------- src/settings.cpp | 35 +- src/settings_cmd.h | 21 + src/settings_gui.cpp | 21 +- src/settings_table.cpp | 9 +- src/settings_type.h | 6 +- src/ship.h | 2 +- src/ship_cmd.cpp | 81 +- src/ship_cmd.h | 19 + src/signal_type.h | 4 +- src/signs_cmd.cpp | 40 +- src/signs_cmd.h | 24 + src/signs_func.h | 1 - src/signs_gui.cpp | 3 +- src/slope_type.h | 2 +- src/smallmap_gui.cpp | 16 +- src/smallmap_gui.h | 9 + src/spritecache.cpp | 50 +- src/spritecache.h | 7 + src/spriteloader/grf.cpp | 21 +- src/spriteloader/grf.hpp | 2 +- src/spriteloader/spriteloader.hpp | 3 +- src/station.cpp | 41 +- src/station_base.h | 16 +- src/station_cmd.cpp | 235 ++-- src/station_cmd.h | 36 + src/station_gui.cpp | 79 +- src/station_gui.h | 8 +- src/station_type.h | 3 +- src/stdafx.h | 20 +- src/story.cpp | 134 +- src/story_base.h | 11 + src/story_cmd.h | 39 + src/story_gui.cpp | 29 +- src/story_type.h | 3 +- src/string.cpp | 18 + src/string_func.h | 3 + src/strings.cpp | 20 +- src/strings_func.h | 2 +- src/subsidy.cpp | 29 +- src/subsidy_cmd.h | 20 + src/table/CMakeLists.txt | 2 +- src/table/cargo_const.h | 2 +- src/table/settings/difficulty_settings.ini | 4 +- src/table/settings/economy_settings.ini | 8 + src/table/settings/gui_settings.ini | 25 +- src/table/settings/misc_settings.ini | 24 +- src/table/settings/news_display_settings.ini | 11 + src/table/settings/pathfinding_settings.ini | 2 +- src/table/settings/world_settings.ini | 18 + src/table/sprites.h | 6 +- src/table/strgen_tables.h | 2 +- src/table/{train_cmd.h => train_sprites.h} | 2 +- src/table/unicode.h | 2 +- src/terraform_cmd.cpp | 115 +- src/terraform_cmd.h | 26 + src/terraform_gui.cpp | 48 +- src/textbuf.cpp | 1 + src/textfile_gui.cpp | 2 +- src/textfile_gui.h | 2 +- src/tile_type.h | 24 +- src/tilearea_type.h | 30 + src/timetable_cmd.cpp | 92 +- src/timetable_cmd.h | 25 + src/timetable_gui.cpp | 48 +- src/toolbar_gui.cpp | 21 +- src/town.h | 8 +- src/town_cmd.cpp | 275 +++-- src/town_cmd.h | 42 + src/town_gui.cpp | 25 +- src/town_type.h | 16 +- src/train.h | 2 +- src/train_cmd.cpp | 137 ++- src/train_cmd.h | 30 + src/train_gui.cpp | 23 +- src/transport_type.h | 2 +- src/tree_cmd.cpp | 22 +- src/tree_cmd.h | 19 + src/tree_gui.cpp | 5 +- src/tunnelbridge_cmd.cpp | 69 +- src/tunnelbridge_cmd.h | 25 + src/vehicle.cpp | 45 +- src/vehicle_base.h | 32 +- src/vehicle_cmd.cpp | 374 +++--- src/vehicle_cmd.h | 56 + src/vehicle_func.h | 44 +- src/vehicle_gui.cpp | 104 +- src/vehicle_type.h | 15 +- src/vehiclelist.cpp | 6 +- src/vehiclelist.h | 4 +- src/video/cocoa/cocoa_ogl.h | 5 +- src/video/cocoa/cocoa_ogl.mm | 5 + src/video/cocoa/cocoa_wnd.mm | 6 +- src/video/opengl.cpp | 10 + src/video/opengl.h | 2 + src/video/sdl2_opengl_v.cpp | 4 + src/video/sdl2_v.cpp | 5 + src/video/sdl2_v.h | 5 +- src/video/video_driver.hpp | 5 + src/video/win32_v.cpp | 27 + src/video/win32_v.h | 5 +- src/viewport.cpp | 15 +- src/viewport_cmd.h | 20 + src/viewport_gui.cpp | 4 +- src/viewport_sprite_sorter_sse4.cpp | 1 + src/viewport_type.h | 3 +- src/walltime_func.h | 2 +- src/water_cmd.cpp | 77 +- src/water_cmd.h | 24 + src/water_map.h | 13 +- src/waypoint_cmd.cpp | 52 +- src/waypoint_cmd.h | 28 + src/waypoint_gui.cpp | 6 +- src/widget.cpp | 46 +- src/widget_type.h | 2 + src/widgets/airport_widget.h | 1 + src/widgets/company_widget.h | 6 +- src/widgets/road_widget.h | 3 +- src/widgets/settings_widget.h | 1 + src/window.cpp | 53 +- src/zoom_func.h | 31 + src/zoom_type.h | 2 +- update.sh | 2 +- 504 files changed, 14161 insertions(+), 9678 deletions(-) create mode 100644 bin/ai/compat_13.nut create mode 100644 bin/game/compat_13.nut create mode 100644 cmake/PackageRPM.cmake delete mode 100644 media/baseset/openttd/flags.nfo delete mode 100644 media/baseset/openttd/flags.png create mode 100644 os/windows/winstore/generate-assets.bat create mode 100644 os/windows/winstore/generate-assets.ps1 create mode 100644 os/windows/winstore/generate-key.bat create mode 100644 os/windows/winstore/generate-key.ps1 create mode 100644 os/windows/winstore/manifests/AssetsPackage.appxmanifest create mode 100644 os/windows/winstore/manifests/Package.appxmanifest create mode 100644 os/windows/winstore/manifests/PackagingLayout.xml create mode 100644 os/windows/winstore/prepare-manifests.bat create mode 100644 os/windows/winstore/prepare-manifests.ps1 create mode 100644 os/windows/winstore/set-version.bat create mode 100644 os/windows/winstore/set-version.ps1 create mode 100644 src/aircraft_cmd.h create mode 100644 src/airport_cmd.h create mode 100644 src/autoreplace_cmd.h delete mode 100644 src/cmd_helper.h create mode 100644 src/company_cmd.h create mode 100644 src/core/strong_typedef_type.hpp create mode 100644 src/depot_cmd.h create mode 100644 src/dock_cmd.h create mode 100644 src/economy_cmd.h create mode 100644 src/engine_cmd.h create mode 100644 src/fontcache/CMakeLists.txt create mode 100644 src/fontcache/freetypefontcache.cpp create mode 100644 src/fontcache/spritefontcache.cpp create mode 100644 src/fontcache/spritefontcache.h create mode 100644 src/fontcache/truetypefontcache.cpp rename src/{fontcache_internal.h => fontcache/truetypefontcache.h} (90%) create mode 100644 src/goal_cmd.h create mode 100644 src/group_cmd.h create mode 100644 src/industry_cmd.h create mode 100644 src/landscape_cmd.h create mode 100644 src/misc/endian_buffer.hpp create mode 100644 src/misc_cmd.h create mode 100644 src/news_cmd.h create mode 100644 src/object_cmd.h create mode 100644 src/order_cmd.h create mode 100644 src/rail_cmd.h create mode 100644 src/roadveh_cmd.h create mode 100644 src/script/script_cmd.h create mode 100644 src/settings_cmd.h create mode 100644 src/ship_cmd.h create mode 100644 src/signs_cmd.h create mode 100644 src/station_cmd.h create mode 100644 src/story_cmd.h create mode 100644 src/subsidy_cmd.h rename src/table/{train_cmd.h => train_sprites.h} (97%) create mode 100644 src/terraform_cmd.h create mode 100644 src/timetable_cmd.h create mode 100644 src/town_cmd.h create mode 100644 src/train_cmd.h create mode 100644 src/tree_cmd.h create mode 100644 src/tunnelbridge_cmd.h create mode 100644 src/vehicle_cmd.h create mode 100644 src/viewport_cmd.h create mode 100644 src/water_cmd.h create mode 100644 src/waypoint_cmd.h diff --git a/.changelog b/.changelog index 28e9b90a82..2e6467bc61 100644 --- a/.changelog +++ b/.changelog @@ -1,26 +1,85 @@ -12.2 (2022-04-02) +13.0-beta1 (2022-10-31) ------------------------------------------------------------------------ -Feature: Remember the last-used signal between games (#9792) -Change: [MacOS] Allow touchbar usage on all supported OS versions (#9776) -Change: Add a timestamp in name of crash files (#9761) -Fix #9736: Duplicate multiplayer window opens upon canceling password entry (#9842) -Fix: Removing long roads doesn't prioritise refusal of local authority over other errors (#9831) -Fix #9020: Glitchy station coverage highlight when changing selection (#9825) -Fix: Correct some Romanian town names (#9819) -Fix: Original music playback rate was slightly too fast (#9814) -Fix #9811: Use the NewGRF-defined vehicle center when dragging ships and aircraft (#9812) -Fix: Do not let shares in the company taking over another company disappear (#9808) -Fix #9802: Crash when using lots of NewGRF waypoint types (#9803) -Fix #9766: Don't write uninitialised data in config file (#9767) -Fix #9743: [MacOS] Don't try to render touchbar sprites with invalid zoom level (#9776) -Fix #9774: Building roadstop in estimation mode updates station acceptance (#9775) -Fix: If vehicles only refit to cargo-slots >= 32, the default cargo was wrong (#9744) -Fix #9735: Possible desync when replacing a depot on same tile (#9738) -Fix #9730: [Network] Connections can use an invalid socket due to a race condition (#9731) -Fix: Don't show sign edit window for GS-owned signs (#9716) -Fix #9702: Display order window for vehicle group on ctrl-click only when using shared orders (#9704) -Fix #9680: Crash when loading really old savegames with aircraft in certain places (#9699) -Fix: Update last servicing dates when using the date cheat (#9694) -Fix: Error message shows about missing glyphs while suitable fallback font is found (#9692) +Feature: Airport construction GUI displays infrastructure cost (#10094) +Feature: Purchase land multiple tiles at a time (#10027) +Feature: Add sticky pin & shade widgets to Object Selection UI panel (#10019, #10020) +Feature: Improved handling of HiDPI and mixed-DPI screens (#9994, #9996, #9997, #10064) +Feature: Alternative linkgraph colour schemes (#9866) +Feature: Allow Shift+Insert as paste in edit box (#9836) +Feature: Setting to make the local town authority rubber-stamp all actions (#9833) +Feature: Add/extend console commands to enable screenshot automation (#9771) +Feature: [Linkgraph] Show a tooltip with statistics when hovering a link (#9760) +Feature: Build objects by area (#9709) +Feature: Add setting to hide news about competitors vehicle crash (#9653) +Feature: Ctrl-click to remove fully autoreplaced vehicles from list (#9639) +Feature: Wide rivers on map generation (#9628) +Add: [Script] ScriptCargo::GetWeight to get cargo weights (#9930) +Add: Command line option to skip NewGRF scanning (#9879) +Add: Show video driver name in Game Options window (#9872) +Add: [NewGRF] Map seed as global variable (#9834) +Add: [Script] IndustryType::ResolveNewGRFID to resolve industry id from grf_local_id and grfid (#9798) +Add: [Script] ObjectType::ResolveNewGRFID to resolve object id from grfid and grf_local_id (#9795) +Update: To all the friends we have lost and those we have gained (#10000) +Change: Use the Simulation subcategory to openttd.desktop (#10015) +Change: Constantly update destination of 'any depot' orders (#9959) +Change: Use an indent, not a dash, to list train capacity (#9887) +Change: [NewGRF] Increase vehicle sprite stack from 4 layers to 8 (#9863) +Change: Don't pay Property Maintenance on stations when Infrastructure Maintenance is disabled (#9828) +Change: Improved layout of the finance window (#9827) +Change: [Admin] Bump admin port protocol due to command changes (#9754) +Change: Suppress vehicle age warnings for stopped vehicles (#9718) +Change: Make pf.yapf.rail_firstred_twoway_eol on by default (#9544) +Change: Deliver cargo to the closest industry first (#9536) +Fix: Lots of fixes to how windows handle resizing (#10040, #10042, #10046, #10051, #10056, #10068, #10070, #10098) +Fix: Console commands list_ai output was truncated with a suitably large number of AIs (#10075) +Fix #9876: MacBook Touch Bar crash / render issues w/ 32bpp graphics (#10060) +Fix: Reduce framerate overhead in Train::Tick (#10055) +Fix: Only open scenario editor date query once (#10050) +Fix #10048: Don't relocate company HQ on the same exact location (#10049) +Fix #10038: Missing upper bounds check when loading custom playlists (#10039) +Fix: Wrong string used to determine size of zoomed out station sign (#10036) +Fix: Disable "turn around" button for other companies' road vehicles (#10033) +Fix: Online Players list mouse hover behaviour (#10031) +Fix: [NewGRF] Weirdness of new stations (#10017) +Fix #9854: DrawStringMultiLine() could draw beyond its bounding box (#10014) +Fix: Incorrect player name in online players window (#10013) +Fix #8099: News window zoom level fixes (#10005) +Fix: [NewGRF] Upper 16 random bits should be the same for all station tiles in callback 140 (#9992) +Fix #9989: £0 Net Profit is neither negative nor positive (#9991) +Fix #9804: Only apply sprite_zoom_min setting when sprites available (#9988) +Fix #9972: Add missing fill/resize flags on Framerate window widgets (#9982) +Fix #9935: Use more selectivity when building SSE specific code (#9980) +Fix #9940: Print debuglevel parse errors to console when changed from console (#9979) +Fix #9977: Clearing the console with a large number of lines could cause a crash (#9978) +Fix #9974: Console command getsysdate did not work due to off-by-one error (#9975) +Fix: [NewGRF] Default value of RailVehicleInfo::railveh_type was inconsistent with other default properties (#9967) +Fix #8584: Vehicles with shared orders getting invalid or unexpected start dates (#9955) +Fix #9951: [NewGRF] Scenario editor random industries button broke NewGRF persistent storage (#9952) +Fix: Validation of various internal command parameters that could have allowed a rogue client to crash servers (#9942, #9943, #9944, #9945, #9946, #9947, #9948, #9950) +Fix #9937: Station industries_near incorrect after removing part moved sign (#9938) +Fix: [Script] ScriptRoad::HasRoadType really check for RoadType (#9934) +Fix #9363: Rebuild client list on reinit event (#9929) +Fix #9925: Industry tile layout validation for layouts of only one tile (#9926) +Fix #9918: Reset industy last production year on scenario start (#9920) +Fix #9914: Prevent more useless pathfinder run for blocked vehicles (#9917) +Fix: List a max of four share owners instead of three (#9905) +Fix: [NewGRF] Industry layouts with zero regular tiles should be invalid (#9902) +Fix #9869: Remove docking tile when doing a clear square (#9898) +Fix: New player companies use favorite manager face, if saved (#9895) +Fix: Towns don't build parallel, redundant bridges (#9891) +Fix #9712: Cap town bridge length at original 11-tile limit (#9890) +Fix #9883: Show cost/income float over end tile of rail or road construction (#9889) +Fix #9870: Don't update infrastructure totals when overbuilding object on canal (#9888) +Fix #9877: GS could trigger 'Cost: £0' cost message (#9878) +Fix 44f2ef1: [strgen] Allow gender for {CARGO_SHORT} (#9873) +Fix #9867: Industry::stations_near not filled at industry creation (#9868) +Fix #9853: Incorrect merge of guiflags and flags for osk_activation (#9855) +Fix #6544: Don't join AI company when loading network game in singleplayer (#9794) +Fix: Company values do not properly account for shares (#9770) +Fix #9546: Crash when no industries are present in game (#9726) +Fix #9708: [Linkgraph] Don't assume vehicles have a non-zero max speed (#9693) +Fix #9665: [Linkgraph] Fix travel times of non-direct journeys (#9693) +Fix #8797: Use logical rail length when placing signals (#9652) +Cleanup: [NewGRF] Remove unused flag sprites (#10052) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index b7016b1650..b95f8baaf0 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -20,10 +20,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: /emsdk/upstream/emscripten/cache key: 2.0.31-${{ runner.os }} @@ -91,7 +91,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install dependencies run: | @@ -166,15 +166,15 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Prepare cache key id: key run: | - echo "::set-output name=image::$ImageOS-$ImageVersion" + echo "image=$ImageOS-$ImageVersion" >> $GITHUB_OUTPUT - name: Enable vcpkg cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: /usr/local/share/vcpkg/installed key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-0 # Increase the number whenever dependencies are modified @@ -244,7 +244,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Prepare cache key id: key @@ -253,10 +253,10 @@ jobs: # Work around caching failure with GNU tar New-Item -Type Junction -Path vcpkg -Target c:\vcpkg - Write-Output "::set-output name=image::$env:ImageOS-$env:ImageVersion" + Write-Output "image=$env:ImageOS-$env:ImageVersion" >> $env:GITHUB_OUTPUT - name: Enable vcpkg cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: vcpkg/installed key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-0 # Increase the number whenever dependencies are modified @@ -338,7 +338,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup MSYS2 uses: msys2/setup-msys2@v2 @@ -408,4 +408,4 @@ jobs: steps: - name: Check annotations - uses: OpenTTD/actions/annotation-check@v2 + uses: OpenTTD/actions/annotation-check@v3 diff --git a/.github/workflows/commit-checker.yml b/.github/workflows/commit-checker.yml index acf622a87e..91fc54b104 100644 --- a/.github/workflows/commit-checker.yml +++ b/.github/workflows/commit-checker.yml @@ -10,7 +10,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 4 diff --git a/.github/workflows/preview_build.yml b/.github/workflows/preview_build.yml index 2a280a6fcd..d2935cefbc 100644 --- a/.github/workflows/preview_build.yml +++ b/.github/workflows/preview_build.yml @@ -31,7 +31,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: ref: ${{ github.event.client_payload.sha }} @@ -41,7 +41,7 @@ jobs: git checkout -b ${name} - name: Setup cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: /emsdk/upstream/emscripten/cache key: 2.0.31-${{ runner.os }} diff --git a/.github/workflows/preview_label.yml b/.github/workflows/preview_label.yml index 6b3e17ea1a..503d4e53eb 100644 --- a/.github/workflows/preview_label.yml +++ b/.github/workflows/preview_label.yml @@ -59,7 +59,7 @@ jobs: - if: steps.core_developer.outcome == 'success' name: Trigger 'preview build' - uses: peter-evans/repository-dispatch@v1 + uses: peter-evans/repository-dispatch@v2 with: token: ${{ secrets.PREVIEW_GITHUB_TOKEN }} event-type: "Preview build #${{ github.event.number }}" diff --git a/.github/workflows/preview_push.yml b/.github/workflows/preview_push.yml index cb68c8f6ce..3868c16f90 100644 --- a/.github/workflows/preview_push.yml +++ b/.github/workflows/preview_push.yml @@ -59,7 +59,7 @@ jobs: - if: toJson(fromJson(steps.earlier_preview.outputs.data)) != '[]' && contains(fromJson(steps.preview_label.outputs.data).*.name, 'preview') name: Trigger 'preview build' - uses: peter-evans/repository-dispatch@v1 + uses: peter-evans/repository-dispatch@v2 with: token: ${{ secrets.PREVIEW_GITHUB_TOKEN }} event-type: "Preview build #${{ github.event.number }}" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d3b4dc329b..7a06e23baf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,14 +29,14 @@ jobs: steps: - name: Checkout (Release) if: github.event_name == 'release' - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: # We generate a changelog; for this we need the full git log. fetch-depth: 0 - name: Checkout (Manual) if: github.event_name == 'workflow_dispatch' - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: ref: ${{ github.event.inputs.ref }} # We generate a changelog; for this we need the full git log. @@ -44,7 +44,7 @@ jobs: - name: Checkout (Trigger) if: github.event_name == 'repository_dispatch' - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: ref: ${{ github.event.client_payload.ref }} # We generate a changelog; for this we need the full git log. @@ -138,10 +138,10 @@ jobs: echo "Folder on CDN: ${FOLDER}" echo "Workflow trigger: ${TRIGGER_TYPE}" - echo "::set-output name=version::$(cat .version)" - echo "::set-output name=is_tag::${IS_TAG}" - echo "::set-output name=folder::${FOLDER}" - echo "::set-output name=trigger_type::${TRIGGER_TYPE}" + echo "version=$(cat .version)" >> $GITHUB_OUTPUT + echo "is_tag=${IS_TAG}" >> $GITHUB_OUTPUT + echo "folder=${FOLDER}" >> $GITHUB_OUTPUT + echo "trigger_type=${TRIGGER_TYPE}" >> $GITHUB_OUTPUT env: NIGHTLIES_BRANCH: master FOLDER_RELEASES: openttd-releases @@ -174,14 +174,14 @@ jobs: echo "::endgroup::" - name: Store bundles - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: openttd-source path: build/bundles/* retention-days: 5 - name: Store source (for other jobs) - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: internal-source path: source.tar.gz @@ -195,7 +195,7 @@ jobs: steps: - name: Download source - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: internal-source @@ -258,7 +258,7 @@ jobs: echo "::endgroup::" - name: Store bundles - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: openttd-docs path: build/bundles/*.tar.xz @@ -276,7 +276,7 @@ jobs: steps: - name: Download source - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: internal-source @@ -355,7 +355,7 @@ jobs: echo "::endgroup::" - name: Store bundles - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: openttd-linux-generic path: build/bundles @@ -371,14 +371,11 @@ jobs: fail-fast: false matrix: include: - - container_image: "ubuntu:18.04" - bundle_name: "bionic" - compiler: "g++-8" - container_image: "ubuntu:20.04" bundle_name: "focal" compiler: "g++" - - container_image: "debian:buster" - bundle_name: "buster" + - container_image: "ubuntu:22.04" + bundle_name: "jammy" compiler: "g++" - container_image: "debian:bullseye" bundle_name: "bullseye" @@ -390,7 +387,7 @@ jobs: steps: - name: Download source - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: internal-source @@ -460,7 +457,7 @@ jobs: echo "::endgroup::" - name: Store bundles - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: openttd-linux-${{ matrix.bundle_name }} path: build/bundles @@ -470,13 +467,13 @@ jobs: name: MacOS needs: source - runs-on: macos-10.15 + runs-on: macos-11 env: MACOSX_DEPLOYMENT_TARGET: 10.14 steps: - name: Download source - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: internal-source @@ -494,10 +491,10 @@ jobs: - name: Prepare cache key id: key run: | - echo "::set-output name=image::$ImageOS-$ImageVersion" + echo "image=$ImageOS-$ImageVersion" >> $GITHUB_OUTPUT - name: Enable vcpkg cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: /usr/local/share/vcpkg/installed key: ${{ steps.key.outputs.image }}-vcpkg-release-0 # Increase the number whenever dependencies are modified @@ -651,7 +648,7 @@ jobs: mv _CPack_Packages/*/Bundle/openttd-*.zip bundles/ - name: Store bundles - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: openttd-macos-universal path: build-x64/bundles @@ -676,7 +673,7 @@ jobs: steps: - name: Download source - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: internal-source @@ -697,10 +694,10 @@ jobs: # Work around caching failure with GNU tar New-Item -Type Junction -Path vcpkg -Target c:\vcpkg - Write-Output "::set-output name=image::$env:ImageOS-$env:ImageVersion" + Write-Output "image=$env:ImageOS-$env:ImageVersion" >> $env:GITHUB_OUTPUT - name: Enable vcpkg cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: vcpkg/installed key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-0 # Increase the number whenever dependencies are modified @@ -844,12 +841,195 @@ jobs: WINDOWS_CERTIFICATE_COMMON_NAME: ${{ secrets.WINDOWS_CERTIFICATE_COMMON_NAME }} - name: Store bundles - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: openttd-windows-${{ matrix.arch }} path: build/bundles retention-days: 5 + windows-appx: + name: Windows Store + needs: + - source + - windows + + if: needs.source.outputs.is_tag == 'true' + runs-on: windows-latest + + steps: + - name: Download source + uses: actions/download-artifact@v3 + with: + name: internal-source + + - name: Unpack source + shell: bash + run: | + tar -xf source.tar.gz --strip-components=1 + + - name: Download x86 build + uses: actions/download-artifact@v3 + with: + name: openttd-windows-x86 + + - name: Download x64 build + uses: actions/download-artifact@v3 + with: + name: openttd-windows-x64 + + - name: Download arm64 build + uses: actions/download-artifact@v3 + with: + name: openttd-windows-arm64 + + - name: Unpack builds + shell: bash + run: | + mkdir builds + cd builds + + function extract { + mkdir $1 + + # Extract the zip version of the release + unzip ../openttd-*-windows-$2.zip -d $1 + + # Remove the extraneous directory + mv $1/openttd-*-windows-$2/* $1/ + rmdir $1/openttd-*-windows-$2 + + # Move the openttd.exe to the '{arch}-binaries' folder + mkdir $1-binaries + mv $1/openttd.exe $1-binaries/ + } + + extract x86 win32 + extract x64 win64 + extract arm64 arm64 + + # Use the "x86" folder as the source of the common binaries (lang files, etc) and remove the others + mv x86 common-binaries + rm -rf x64 arm64 + + - name: Install OpenGFX + shell: bash + run: | + mkdir -p builds/common-binaries/baseset + cd builds/common-binaries/baseset + + echo "::group::Download OpenGFX" + curl -L https://cdn.openttd.org/opengfx-releases/7.1/opengfx-7.1-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" + unzip opengfx-all.zip + tar xf opengfx-*.tar + echo "::endgroup::" + + rm -f opengfx-all.zip opengfx-*.tar + + - name: Install OpenMSX + shell: bash + run: | + mkdir -p builds/common-binaries/baseset + cd builds/common-binaries/baseset + + echo "::group::Download OpenMSX" + curl -L https://cdn.openttd.org/openmsx-releases/0.4.2/openmsx-0.4.2-all.zip -o openmsx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" + unzip openmsx-all.zip + tar xf openmsx-*.tar + echo "::endgroup::" + + rm -f openmsx-all.zip openmsx-*.tar + + - name: Install OpenSFX + shell: bash + run: | + mkdir -p builds/common-binaries/baseset/opensfx + cd builds/common-binaries/baseset/opensfx + + echo "::group::Download OpenSFX" + curl -L https://cdn.openttd.org/opensfx-releases/1.0.3/opensfx-1.0.3-all.zip -o opensfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenSFX" + unzip opensfx-all.zip + tar xf opensfx-*.tar + echo "::endgroup::" + + rm -f opensfx-all.zip opensfx-*.tar + + - name: Generate signing certificate + shell: cmd + run: | + cd builds + + REM We need to provide a signed .appx to the Windows Store, so generate a certificate with password 'password' + call ..\os\windows\winstore\generate-key.bat "CN=78024DA8-4BE4-4C77-B12E-547BBF7359D2" password cert.pfx + + - name: Generate assets + shell: cmd + run: | + cd os\windows\winstore + call generate-assets.bat + + - name: Prepare manifests + shell: cmd + run: | + cd builds + mkdir manifests + + REM Set the version environment variable + call ..\os\windows\winstore\set-version.bat x86-binaries\openttd.exe + + call ..\os\windows\winstore\prepare-manifests.bat manifests "CN=78024DA8-4BE4-4C77-B12E-547BBF7359D2" "57420OpenTTDDevelopers.OpenTTDofficial" + + - name: Prepare binaries + shell: bash + run: | + cd builds + + # Copy the Windows Store assets + mkdir common-binaries/Assets + cp -R ../os/windows/winstore/assets-common/* common-binaries/Assets/ + + mkdir Assets + cp -R ../os/windows/winstore/assets/* Assets/ + + cp manifests/*.xml . + + - name: Build + shell: cmd + run: | + REM Add the Windows SDK tools to the PATH + + echo|set /p="SET VS_INSTALLDIR=" > _vspath.bat + vswhere -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath >> _vspath.bat + call _vspath.bat + call "%VS_INSTALLDIR%\Common7\Tools\VsDevCmd.bat" + + REM Set the version environment variable + call os\windows\winstore\set-version.bat builds\x86-binaries\openttd.exe + + cd builds + mkdir output + + REM Build and sign the package + makeappx build /v /f PackagingLayout.xml /op output\ /bv %OTTD_VERSION% /pv %OTTD_VERSION% /ca + SignTool sign /fd sha256 /a /f cert.pfx /p password "output\OpenTTD.appxbundle" + + - name: Store appx + uses: actions/upload-artifact@v3 + with: + name: openttd-windows-store + path: | + builds/output/OpenTTD.appxbundle + builds/cert.pfx + retention-days: 5 + upload: name: Upload (AWS) needs: @@ -871,7 +1051,7 @@ jobs: steps: - name: Download all bundles - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 - name: Calculate checksums run: | @@ -903,7 +1083,7 @@ jobs: AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} - name: Trigger 'New OpenTTD release' - uses: peter-evans/repository-dispatch@v1 + uses: peter-evans/repository-dispatch@v2 with: token: ${{ secrets.DEPLOYMENT_TOKEN }} repository: OpenTTD/workflows @@ -924,7 +1104,7 @@ jobs: steps: - name: Download all bundles - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 - name: Setup steamcmd uses: CyberAndrii/setup-steamcmd@v1 diff --git a/.github/workflows/unused-strings.yml b/.github/workflows/unused-strings.yml index d63da91c30..6026671307 100644 --- a/.github/workflows/unused-strings.yml +++ b/.github/workflows/unused-strings.yml @@ -10,7 +10,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Check for unused strings run: | diff --git a/.ottdrev b/.ottdrev index a4e83a48cf..203d48e351 100644 --- a/.ottdrev +++ b/.ottdrev @@ -1 +1 @@ -12.2 20220402 0 1893dba8a172636791dc79137a3331bd41cc50bc 1 1 2022 +13.0-beta1 20221031 0 c4e655b1d4fa83b8f192d2df0062f6dd7f346aad 1 0 2022 diff --git a/.release_date b/.release_date index 3f8c9f2c93..cf53716dd2 100644 --- a/.release_date +++ b/.release_date @@ -1 +1 @@ -2022-04-02 10:38 UTC +2022-11-01 19:19 UTC diff --git a/.version b/.version index 5807e59269..61c359a5f0 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -12.2 +13.0-beta1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fce7343e3..f4e08daf4a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ if(NOT BINARY_NAME) endif() project(${BINARY_NAME} - VERSION 12.2 + VERSION 13.0 ) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f9ffdf98ce..b0ca0ab7a9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -94,8 +94,8 @@ Although we really appreciate feedback and ideas, we will close feature requests Many of those ideas etc do have a place on the [forums](https://www.tt-forums.net); and if enough people like it, someone will stand up and make it. -It's usually best discuss in [irc](https://wiki.openttd.org/en/Development/IRC%20channel) before opening a feature request or working on a large feature in a fork. -Discussion in irc can take time, but it can be productive and avoid disappointment :) +It's usually best to discuss on [Discord](https://discord.gg/openttd) before opening a feature request or working on a large feature in a fork. +Discussion can take time, but it can be productive and avoid disappointment. :) ## Pull requests @@ -212,8 +212,8 @@ When it comes to gameplay features there are at least these groups of interests: - *Control freak:* micromanagement like conditional orders, refitting and loading etc. - *Casual:* automatisation like cargodist, path based signalling etc. -To please everyone, the official branch tries to stay close to the original gameplay; after all, that is what everyone brought here. -The preferred method to alter and extent the gameplay is via add-ons like NewGRF and GameScripts. +To please everyone, the official branch tries to stay close to the original gameplay; after all, that is what brought everyone here. +The preferred method to alter and extend the gameplay is via add-ons like NewGRF and GameScripts. For a long time, the official branch was also open to features which could be enabled/disabled, but the corner-cases that came with some configurations have rendered some parts of the code very complicated. Today, new features have to work with all the already existing features, which is not only challenging in corner cases, but also requires spending considerable more work than just "making it work in the game mode that I play". diff --git a/CREDITS.md b/CREDITS.md index 33f8836265..698ea54ebb 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -1,31 +1,31 @@ ### The OpenTTD team (in alphabetical order): -- Grzegorz Duczyński (adf88) - General coding (since 1.7.2) -- Albert Hofkamp (Alberth) - GUI expert (since 0.7) - Matthijs Kooijman (blathijs) - Pathfinder-guru, Debian port (since 0.3) -- Ulf Hermann (fonsinchen) - Cargo Distribution (since 1.3) - Christoph Elsenhans (frosch) - General coding (since 0.6) -- Loïc Guilloux (glx) - Windows Expert (since 0.4.5) +- Loïc Guilloux (glx) - General / Windows Expert (since 0.4.5) - Charles Pigott (LordAro) - General / Correctness police (since 1.9) -- Michael Lutz (michi_cc) - Path based signals (since 0.7) +- Michael Lutz (michi_cc) - General / Path based signals (since 0.7) - Niels Martin Hansen (nielsm) - Music system, general coding (since 1.9) - Owen Rudge (orudge) - Forum host, OS/2 port (since 0.1) - Peter Nelson (peter1138) - Spiritual descendant from newGRF gods (since 0.4.5) -- Ingo von Borstel (planetmaker) - General coding, Support (since 1.1) -- Remko Bijker (Rubidium) - Lead coder and way more (since 0.4.5) -- José Soler (Terkhen) - General coding (since 1.0) +- Remko Bijker (Rubidium) - Coder and way more (since 0.4.5) +- Patric Stout (TrueBrain) - NoProgrammer (since 0.3), sys op ### Inactive Developers: +- Grzegorz Duczyński (adf88) - General coding (1.7 - 1.8) +- Albert Hofkamp (Alberth) - GUI expert (0.7 - 1.9) - Jean-François Claeys (Belugas) - GUI, newindustries and more (0.4.5 - 1.0) - Bjarni Corfitzen (Bjarni) - macOS port, coder and vehicles (0.3 - 0.7) - Victor Fischer (Celestar) - Programming everywhere you need him to (0.3 - 0.6) +- Ulf Hermann (fonsinchen) - Cargo Distribution (1.3 - 1.6) - Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;) (0.4.5 - 0.6) - Jonathan Coome (Maedhros) - High priest of the NewGRF Temple (0.5 - 0.6) -- Attila Bán (MiHaMiX) - WebTranslator 1 and 2 (0.3 - 0.5) +- Attila Bán (MiHaMiX) - Developer WebTranslator 1 and 2 (0.3 - 0.5) +- Ingo von Borstel (planetmaker) - General coding, Support (1.1 - 1.9) - Zdeněk Sojka (SmatZ) - Bug finder and fixer (0.6 - 1.3) +- José Soler (Terkhen) - General coding (1.0 - 1.4) - Christoph Mallon (Tron) - Programmer, code correctness police (0.3 - 0.5) -- Patric Stout (TrueBrain) - NoProgrammer (0.3 - 1.2), sys op (active) - Thijs Marinussen (Yexo) - AI Framework, General (0.6 - 1.3) - Leif Linse (Zuu) - AI/Game Script (1.2 - 1.6) @@ -33,11 +33,11 @@ - Tamás Faragó (Darkvater) - Ex-Lead coder (0.3 - 0.5) - Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3 - 0.3) -- Emil Djupfeld (egladil) - macOS port (0.4 - 0.6) +- Emil Djupfeld (egladil) - macOS port (0.4.5 - 0.6) - Simon Sasburg (HackyKid) - Bug fixer (0.4 - 0.4.5) - Ludvig Strigeus (ludde) - Original author of OpenTTD, main coder (0.1 - 0.3) - Cian Duffy (MYOB) - BeOS port / manual writing (0.1 - 0.3) -- Petr Baudiš (pasky) - Many patches, newgrf support, etc. (0.3 - 0.3) +- Petr Baudiš (pasky) - Many patches, newgrf support (0.3 - 0.3) - Benedikt Brüggemeier (skidd13) - Bug fixer and code reworker (0.6 - 0.7) - Serge Paquet (vurlix) - 2nd contributor after ludde (0.1 - 0.3) @@ -52,7 +52,7 @@ - Alberto Demichelis - Squirrel scripting language - L. Peter Deutsch - MD5 implementation - Michael Blunck - For revolutionizing TTD with awesome graphics -- George - Canal graphics +- George - Canal/Lock graphics - Andrew Parkhouse (andythenorth) - River graphics - David Dallaston (Pikka) - Tram tracks - All Translators - For their support to make OpenTTD a truly international game diff --git a/README.md b/README.md index 311f9e0ed0..96f137307c 100644 --- a/README.md +++ b/README.md @@ -116,35 +116,6 @@ Most types of add-on content can be downloaded within OpenTTD via the 'Check Onl Add-on content can also be installed manually, but that's more complicated; the [OpenTTD wiki](https://wiki.openttd.org/) may offer help with that, or the [OpenTTD directory structure guide](./docs/directory_structure.md). -### 1.5.1) AI opponents - -OpenTTD comes without AI opponents, so if you want to play with AIs you have to download them. - -The easiest way is via the 'Check Online Content' button in the main menu. - -You can select some AIs that you think are compatible with your playing style. - -AI help and discussions may also be found in the [AI section of the forum](https://www.tt-forums.net/viewforum.php?f=65). - -### 1.5.2) Scenarios and height maps - -Scenarios and heightmaps can be added via the 'Check Online Content' button in the main menu. - -### 1.5.3) NewGRFs - -A wide range of add-content is available as NewGRFs, including vehicles, industries, stations, landscape objects, town names and more. - -NewGRFs can be added via the 'Check Online Content' button in the main menu. - -See also the wiki [guide to NewGRFs](https://wiki.openttd.org/en/Manual/NewGRF) and [the forum graphics development section](https://www.tt-forums.net/viewforum.php?f=66). - -### 1.5.4) Game scripts - -Game scripts can provide additional challenges or changes to the standard OpenTTD gameplay, for example setting transport goals, or changing town growth behaviour. - -Game scripts can be added via the 'Check Online Content' button in the main menu. - -See also the wiki [guide to game scripts](https://wiki.openttd.org/en/Manual/Game%20script) and [the forum graphics game script section](https://www.tt-forums.net/viewforum.php?f=65). ### 1.6) OpenTTD directories @@ -162,6 +133,7 @@ If you want to compile OpenTTD from source, instructions can be found in [COMPIL 'Official' channels - [OpenTTD website](https://www.openttd.org) +- [OpenTTD official Discord](https://discord.gg/openttd) - IRC chat using #openttd on irc.oftc.net [more info about our irc channel](https://wiki.openttd.org/en/Development/IRC%20channel) - [OpenTTD on Github](https://github.com/OpenTTD/) for code repositories and for reporting issues - [forum.openttd.org](https://forum.openttd.org/) - the primary community forum site for discussing OpenTTD and related games diff --git a/bin/ai/compat_0.7.nut b/bin/ai/compat_0.7.nut index c40308592c..341b543bd3 100644 --- a/bin/ai/compat_0.7.nut +++ b/bin/ai/compat_0.7.nut @@ -379,3 +379,16 @@ AIGroup.CreateGroup <- function(vehicle_type) { return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); } + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.0.nut b/bin/ai/compat_1.0.nut index b8da71a194..6b76f11534 100644 --- a/bin/ai/compat_1.0.nut +++ b/bin/ai/compat_1.0.nut @@ -131,3 +131,16 @@ AIGroup.CreateGroup <- function(vehicle_type) { return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); } + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.1.nut b/bin/ai/compat_1.1.nut index f1bda9c7fe..9c568a7006 100644 --- a/bin/ai/compat_1.1.nut +++ b/bin/ai/compat_1.1.nut @@ -68,3 +68,16 @@ AIGroup.CreateGroup <- function(vehicle_type) { return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); } + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.10.nut b/bin/ai/compat_1.10.nut index 2baaddb836..44bc2542ce 100644 --- a/bin/ai/compat_1.10.nut +++ b/bin/ai/compat_1.10.nut @@ -6,3 +6,16 @@ */ AILog.Info("1.10 API compatibility in effect."); + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.11.nut b/bin/ai/compat_1.11.nut index 887f3f7fd9..3d8370ffc6 100644 --- a/bin/ai/compat_1.11.nut +++ b/bin/ai/compat_1.11.nut @@ -6,3 +6,16 @@ */ AILog.Info("1.11 API compatibility in effect."); + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.2.nut b/bin/ai/compat_1.2.nut index 550f79969c..fc52b04935 100644 --- a/bin/ai/compat_1.2.nut +++ b/bin/ai/compat_1.2.nut @@ -20,3 +20,16 @@ AIGroup.CreateGroup <- function(vehicle_type) { return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); } + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.3.nut b/bin/ai/compat_1.3.nut index 6b2c7e8a71..a06e98d2dd 100644 --- a/bin/ai/compat_1.3.nut +++ b/bin/ai/compat_1.3.nut @@ -20,3 +20,16 @@ AIGroup.CreateGroup <- function(vehicle_type) { return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); } + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.4.nut b/bin/ai/compat_1.4.nut index a9ab5a4757..6de24bf80c 100644 --- a/bin/ai/compat_1.4.nut +++ b/bin/ai/compat_1.4.nut @@ -20,3 +20,16 @@ AIGroup.CreateGroup <- function(vehicle_type) { return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); } + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.5.nut b/bin/ai/compat_1.5.nut index 23944149f6..8ff5a39d15 100644 --- a/bin/ai/compat_1.5.nut +++ b/bin/ai/compat_1.5.nut @@ -20,3 +20,16 @@ AIGroup.CreateGroup <- function(vehicle_type) { return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); } + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.6.nut b/bin/ai/compat_1.6.nut index bcbe91455c..91744512a7 100644 --- a/bin/ai/compat_1.6.nut +++ b/bin/ai/compat_1.6.nut @@ -20,3 +20,16 @@ AIGroup.CreateGroup <- function(vehicle_type) { return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); } + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.7.nut b/bin/ai/compat_1.7.nut index 7c2fd9b825..584a970f60 100644 --- a/bin/ai/compat_1.7.nut +++ b/bin/ai/compat_1.7.nut @@ -20,3 +20,16 @@ AIGroup.CreateGroup <- function(vehicle_type) { return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); } + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.8.nut b/bin/ai/compat_1.8.nut index a118a63b57..f57a0eab27 100644 --- a/bin/ai/compat_1.8.nut +++ b/bin/ai/compat_1.8.nut @@ -20,3 +20,16 @@ AIGroup.CreateGroup <- function(vehicle_type) { return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); } + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_1.9.nut b/bin/ai/compat_1.9.nut index a3d0941327..0dde6dc6da 100644 --- a/bin/ai/compat_1.9.nut +++ b/bin/ai/compat_1.9.nut @@ -6,3 +6,16 @@ */ AILog.Info("1.9 API compatibility in effect."); + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_12.nut b/bin/ai/compat_12.nut index 3081fb58e8..d54895632f 100644 --- a/bin/ai/compat_12.nut +++ b/bin/ai/compat_12.nut @@ -4,3 +4,18 @@ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ + +AILog.Info("12 API compatibility in effect."); + +/* 13 really checks RoadType against RoadType */ +AIRoad._HasRoadType <- AIRoad.HasRoadType; +AIRoad.HasRoadType <- function(tile, road_type) +{ + local list = AIRoadTypeList(AIRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (AIRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/ai/compat_13.nut b/bin/ai/compat_13.nut new file mode 100644 index 0000000000..3081fb58e8 --- /dev/null +++ b/bin/ai/compat_13.nut @@ -0,0 +1,6 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ diff --git a/bin/game/compat_1.10.nut b/bin/game/compat_1.10.nut index 92cef84c53..2559ff0a9c 100644 --- a/bin/game/compat_1.10.nut +++ b/bin/game/compat_1.10.nut @@ -13,3 +13,16 @@ GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) { return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); } + +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_1.11.nut b/bin/game/compat_1.11.nut index fa240b5d2d..eac9a05d36 100644 --- a/bin/game/compat_1.11.nut +++ b/bin/game/compat_1.11.nut @@ -6,3 +6,16 @@ */ GSLog.Info("1.11 API compatibility in effect."); + +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_1.2.nut b/bin/game/compat_1.2.nut index 5fb29efedf..66e2ca5d62 100644 --- a/bin/game/compat_1.2.nut +++ b/bin/game/compat_1.2.nut @@ -35,3 +35,16 @@ GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) { return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); } + +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_1.3.nut b/bin/game/compat_1.3.nut index 7546e54c69..9986ea03e5 100644 --- a/bin/game/compat_1.3.nut +++ b/bin/game/compat_1.3.nut @@ -35,3 +35,16 @@ GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) { return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); } + +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_1.4.nut b/bin/game/compat_1.4.nut index c90b3e550b..b3ec5c45cb 100644 --- a/bin/game/compat_1.4.nut +++ b/bin/game/compat_1.4.nut @@ -28,3 +28,15 @@ GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); } +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_1.5.nut b/bin/game/compat_1.5.nut index 0c62e56462..2d25d7acf0 100644 --- a/bin/game/compat_1.5.nut +++ b/bin/game/compat_1.5.nut @@ -20,3 +20,16 @@ GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) { return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); } + +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_1.6.nut b/bin/game/compat_1.6.nut index 198b863a77..d205832209 100644 --- a/bin/game/compat_1.6.nut +++ b/bin/game/compat_1.6.nut @@ -20,3 +20,16 @@ GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) { return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); } + +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_1.7.nut b/bin/game/compat_1.7.nut index 76dc424353..1108f41a7c 100644 --- a/bin/game/compat_1.7.nut +++ b/bin/game/compat_1.7.nut @@ -20,3 +20,16 @@ GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) { return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); } + +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_1.8.nut b/bin/game/compat_1.8.nut index b9d27458a9..139f91214b 100644 --- a/bin/game/compat_1.8.nut +++ b/bin/game/compat_1.8.nut @@ -20,3 +20,16 @@ GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) { return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); } + +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_1.9.nut b/bin/game/compat_1.9.nut index 32eec114af..053e377d4c 100644 --- a/bin/game/compat_1.9.nut +++ b/bin/game/compat_1.9.nut @@ -13,3 +13,16 @@ GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) { return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); } + +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_12.nut b/bin/game/compat_12.nut index 3081fb58e8..a11cd04a23 100644 --- a/bin/game/compat_12.nut +++ b/bin/game/compat_12.nut @@ -4,3 +4,18 @@ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ + +GSLog.Info("12 API compatibility in effect."); + +/* 13 really checks RoadType against RoadType */ +GSRoad._HasRoadType <- GSRoad.HasRoadType; +GSRoad.HasRoadType <- function(tile, road_type) +{ + local list = GSRoadTypeList(GSRoad.GetRoadTramType(road_type)); + foreach (rt, _ in list) { + if (GSRoad._HasRoadType(tile, rt)) { + return true; + } + } + return false; +} diff --git a/bin/game/compat_13.nut b/bin/game/compat_13.nut new file mode 100644 index 0000000000..3081fb58e8 --- /dev/null +++ b/bin/game/compat_13.nut @@ -0,0 +1,6 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ diff --git a/changelog.txt b/changelog.txt index 5e0f4204f9..12d3ffe756 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,88 @@ +13.0-beta1 (2022-10-31) +------------------------------------------------------------------------ +Feature: Airport construction GUI displays infrastructure cost (#10094) +Feature: Purchase land multiple tiles at a time (#10027) +Feature: Add sticky pin & shade widgets to Object Selection UI panel (#10019, #10020) +Feature: Improved handling of HiDPI and mixed-DPI screens (#9994, #9996, #9997, #10064) +Feature: Alternative linkgraph colour schemes (#9866) +Feature: Allow Shift+Insert as paste in edit box (#9836) +Feature: Setting to make the local town authority rubber-stamp all actions (#9833) +Feature: Add/extend console commands to enable screenshot automation (#9771) +Feature: [Linkgraph] Show a tooltip with statistics when hovering a link (#9760) +Feature: Build objects by area (#9709) +Feature: Add setting to hide news about competitors vehicle crash (#9653) +Feature: Ctrl-click to remove fully autoreplaced vehicles from list (#9639) +Feature: Wide rivers on map generation (#9628) +Add: [Script] ScriptCargo::GetWeight to get cargo weights (#9930) +Add: Command line option to skip NewGRF scanning (#9879) +Add: Show video driver name in Game Options window (#9872) +Add: [NewGRF] Map seed as global variable (#9834) +Add: [Script] IndustryType::ResolveNewGRFID to resolve industry id from grf_local_id and grfid (#9798) +Add: [Script] ObjectType::ResolveNewGRFID to resolve object id from grfid and grf_local_id (#9795) +Update: To all the friends we have lost and those we have gained (#10000) +Change: Use the Simulation subcategory to openttd.desktop (#10015) +Change: Constantly update destination of 'any depot' orders (#9959) +Change: Use an indent, not a dash, to list train capacity (#9887) +Change: [NewGRF] Increase vehicle sprite stack from 4 layers to 8 (#9863) +Change: Don't pay Property Maintenance on stations when Infrastructure Maintenance is disabled (#9828) +Change: Improved layout of the finance window (#9827) +Change: [Admin] Bump admin port protocol due to command changes (#9754) +Change: Suppress vehicle age warnings for stopped vehicles (#9718) +Change: Make pf.yapf.rail_firstred_twoway_eol on by default (#9544) +Change: Deliver cargo to the closest industry first (#9536) +Fix: Lots of fixes to how windows handle resizing (#10040, #10042, #10046, #10051, #10056, #10068, #10070, #10098) +Fix: Console commands list_ai output was truncated with a suitably large number of AIs (#10075) +Fix #9876: MacBook Touch Bar crash / render issues w/ 32bpp graphics (#10060) +Fix: Reduce framerate overhead in Train::Tick (#10055) +Fix: Only open scenario editor date query once (#10050) +Fix #10048: Don't relocate company HQ on the same exact location (#10049) +Fix #10038: Missing upper bounds check when loading custom playlists (#10039) +Fix: Wrong string used to determine size of zoomed out station sign (#10036) +Fix: Disable "turn around" button for other companies' road vehicles (#10033) +Fix: Online Players list mouse hover behaviour (#10031) +Fix: [NewGRF] Weirdness of new stations (#10017) +Fix #9854: DrawStringMultiLine() could draw beyond its bounding box (#10014) +Fix: Incorrect player name in online players window (#10013) +Fix #8099: News window zoom level fixes (#10005) +Fix: [NewGRF] Upper 16 random bits should be the same for all station tiles in callback 140 (#9992) +Fix #9989: £0 Net Profit is neither negative nor positive (#9991) +Fix #9804: Only apply sprite_zoom_min setting when sprites available (#9988) +Fix #9972: Add missing fill/resize flags on Framerate window widgets (#9982) +Fix #9935: Use more selectivity when building SSE specific code (#9980) +Fix #9940: Print debuglevel parse errors to console when changed from console (#9979) +Fix #9977: Clearing the console with a large number of lines could cause a crash (#9978) +Fix #9974: Console command getsysdate did not work due to off-by-one error (#9975) +Fix: [NewGRF] Default value of RailVehicleInfo::railveh_type was inconsistent with other default properties (#9967) +Fix #8584: Vehicles with shared orders getting invalid or unexpected start dates (#9955) +Fix #9951: [NewGRF] Scenario editor random industries button broke NewGRF persistent storage (#9952) +Fix: Validation of various internal command parameters that could have allowed a rogue client to crash servers (#9942, #9943, #9944, #9945, #9946, #9947, #9948, #9950) +Fix #9937: Station industries_near incorrect after removing part moved sign (#9938) +Fix: [Script] ScriptRoad::HasRoadType really check for RoadType (#9934) +Fix #9363: Rebuild client list on reinit event (#9929) +Fix #9925: Industry tile layout validation for layouts of only one tile (#9926) +Fix #9918: Reset industy last production year on scenario start (#9920) +Fix #9914: Prevent more useless pathfinder run for blocked vehicles (#9917) +Fix: List a max of four share owners instead of three (#9905) +Fix: [NewGRF] Industry layouts with zero regular tiles should be invalid (#9902) +Fix #9869: Remove docking tile when doing a clear square (#9898) +Fix: New player companies use favorite manager face, if saved (#9895) +Fix: Towns don't build parallel, redundant bridges (#9891) +Fix #9712: Cap town bridge length at original 11-tile limit (#9890) +Fix #9883: Show cost/income float over end tile of rail or road construction (#9889) +Fix #9870: Don't update infrastructure totals when overbuilding object on canal (#9888) +Fix #9877: GS could trigger 'Cost: £0' cost message (#9878) +Fix 44f2ef1: [strgen] Allow gender for {CARGO_SHORT} (#9873) +Fix #9867: Industry::stations_near not filled at industry creation (#9868) +Fix #9853: Incorrect merge of guiflags and flags for osk_activation (#9855) +Fix #6544: Don't join AI company when loading network game in singleplayer (#9794) +Fix: Company values do not properly account for shares (#9770) +Fix #9546: Crash when no industries are present in game (#9726) +Fix #9708: [Linkgraph] Don't assume vehicles have a non-zero max speed (#9693) +Fix #9665: [Linkgraph] Fix travel times of non-direct journeys (#9693) +Fix #8797: Use logical rail length when placing signals (#9652) +Cleanup: [NewGRF] Remove unused flag sprites (#10052) + + 12.2 (2022-04-02) ------------------------------------------------------------------------ Feature: Remember the last-used signal between games (#9792) diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake index ad4a46aca7..b1cec89daf 100644 --- a/cmake/CompileFlags.cmake +++ b/cmake/CompileFlags.cmake @@ -56,6 +56,11 @@ macro(compile_flags) if(MSVC) add_compile_options(/W3) + if(MSVC_VERSION GREATER 1929) + # Starting with version 19.30, there is an optimisation bug, see #9966 for details + # This flag disables the broken optimisation to work around the bug + add_compile_options(/d2ssa-rse-) + endif() elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") add_compile_options( -W diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index 057f0934f8..be37b9b745 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -122,6 +122,8 @@ set(CPACK_STRIP_FILES YES) set(CPACK_OUTPUT_FILE_PREFIX "bundles") if(APPLE) + # Stripping would produce unreadable stacktraces. + set(CPACK_STRIP_FILES NO) set(CPACK_GENERATOR "Bundle") include(PackageBundle) @@ -129,7 +131,7 @@ if(APPLE) set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macos-universal") else() set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macos-${CPACK_SYSTEM_NAME}") - endif() + endif() elseif(WIN32) set(CPACK_GENERATOR "ZIP") if(OPTION_USE_NSIS) @@ -181,6 +183,10 @@ elseif(UNIX) if(DISTRO_ID STREQUAL "arch") set(PLATFORM "arch") set(CPACK_GENERATOR "TXZ") + elseif(DISTRO_ID STREQUAL "fedora" OR DISTRO_ID STREQUAL "rhel") + set(PLATFORM "fedora") + set(CPACK_GENERATOR "RPM") + include(PackageRPM) else() set(UNSUPPORTED_PLATFORM_NAME "Linux distribution '${DISTRO_ID}' from /etc/os-release") endif() diff --git a/cmake/LinkPackage.cmake b/cmake/LinkPackage.cmake index 0f62d3296c..bea9deb0cf 100644 --- a/cmake/LinkPackage.cmake +++ b/cmake/LinkPackage.cmake @@ -18,6 +18,6 @@ function(link_package NAME) message(STATUS "${NAME} found -- -DWITH_${UCNAME} -- ${${NAME}_INCLUDE_DIRS} ${${NAME}_INCLUDE_DIR} -- ${${NAME}_LIBRARIES} ${${NAME}_LIBRARY}") endif() elseif(LP_ENCOURAGED) - message(WARNING "${NAME} not found; compiling OpenTTD without ${NAME} is strongly disencouraged") + message(WARNING "${NAME} not found; compiling OpenTTD without ${NAME} is strongly discouraged") endif() endfunction() diff --git a/cmake/MSVCFilters.cmake b/cmake/MSVCFilters.cmake index db53fc2258..b334f6a91a 100644 --- a/cmake/MSVCFilters.cmake +++ b/cmake/MSVCFilters.cmake @@ -3,6 +3,7 @@ source_group("AI Core" REGULAR_EXPRESSION "src/ai/") source_group("Blitters" REGULAR_EXPRESSION "src/blitter/") source_group("Core Source Code" REGULAR_EXPRESSION "src/core/") +source_group("Font Cache" REGULAR_EXPRESSION "src/fontcache/") source_group("Game Core" REGULAR_EXPRESSION "src/game/") source_group("MD5" REGULAR_EXPRESSION "src/3rdparty/md5/") source_group("Misc" REGULAR_EXPRESSION "src/misc/") diff --git a/cmake/Options.cmake b/cmake/Options.cmake index bfa14b6c3c..42d1127906 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -56,7 +56,7 @@ function(set_options) option(OPTION_DEDICATED "Build dedicated server only (no GUI)" OFF) option(OPTION_INSTALL_FHS "Install with Filesystem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS}) - option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" OFF) + option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" ON) if(EMSCRIPTEN) # Although pthreads is supported, it is not in a way yet that is # useful for us. diff --git a/cmake/PackageRPM.cmake b/cmake/PackageRPM.cmake new file mode 100644 index 0000000000..d91bb28326 --- /dev/null +++ b/cmake/PackageRPM.cmake @@ -0,0 +1 @@ +set(CPACK_RPM_PACKAGE_ARCHITECTURE "${ARCHITECTURE}") diff --git a/cmake/scripts/GenerateWidget.cmake b/cmake/scripts/GenerateWidget.cmake index f46a67e690..b6748422f5 100644 --- a/cmake/scripts/GenerateWidget.cmake +++ b/cmake/scripts/GenerateWidget.cmake @@ -13,6 +13,7 @@ cmake_minimum_required(VERSION 3.5) # The parameter "enumname" specifies the enumeration to extract. This can also be a regular expression. # The parameter "filename" specifies the relative path to the file, where the enumeration is extracted from. This can also be a glob expression. # +# All files where enumerations are extracted from are automatically added via #include # if(NOT GENERATE_SOURCE_FILE) @@ -41,6 +42,7 @@ foreach(ENUM IN LISTS ENUM_LINES) string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" FILE ${FILE}) string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}/* automatically generated from ${FILE} */") + list(APPEND INCLUDES "#include \"${FILE}\"") foreach(LINE IN LISTS SOURCE_LINES) string(REPLACE "${RM_INDENT}" "" LINE "${LINE}") @@ -116,4 +118,7 @@ foreach(ENUM IN LISTS ENUM_LINES) endforeach() endforeach() + list(REMOVE_DUPLICATES INCLUDES) + string(REPLACE ";" "\n" INCLUDES "${INCLUDES}") + configure_file(${GENERATE_SOURCE_FILE} ${GENERATE_BINARY_FILE}) diff --git a/cmake/scripts/Regression.cmake b/cmake/scripts/Regression.cmake index e21a86d292..19fece83f5 100644 --- a/cmake/scripts/Regression.cmake +++ b/cmake/scripts/Regression.cmake @@ -35,6 +35,7 @@ execute_process(COMMAND ${OPENTTD_EXECUTABLE} -vnull:ticks=30000 -d script=2 -d misc=9 + -Q OUTPUT_VARIABLE REGRESSION_OUTPUT ERROR_VARIABLE REGRESSION_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE diff --git a/cmake/scripts/SquirrelIncludes.cmake b/cmake/scripts/SquirrelIncludes.cmake index 672ad09531..ef81ddf041 100644 --- a/cmake/scripts/SquirrelIncludes.cmake +++ b/cmake/scripts/SquirrelIncludes.cmake @@ -12,32 +12,11 @@ endif() if(NOT APIUC) message(FATAL_ERROR "Script needs APIUC defined") endif() +if(NOT API_FILES) + message(FATAL_ERROR "Script needs API_FILES defined") +endif() -set(ARGC 1) -set(ARG_READ NO) - -# For MSVC CMake runs this script from a batch file using || to detect errors, -# depending on source path it may quote args, and cause cmd to not understand || -# and pass it as argument to ourself. -# Read all the arguments given to CMake; we are looking for -- and everything -# that follows, until ||. Those are our api files. -while(ARGC LESS CMAKE_ARGC) - set(ARG ${CMAKE_ARGV${ARGC}}) - - if(ARG STREQUAL "||") - set(ARG_READ NO) - endif() - - if(ARG_READ) - list(APPEND SCRIPT_API_BINARY_FILES "${ARG}") - endif() - - if(ARG STREQUAL "--") - set(ARG_READ YES) - endif() - - math(EXPR ARGC "${ARGC} + 1") -endwhile() +file(READ "${API_FILES}" SCRIPT_API_BINARY_FILES) foreach(FILE IN LISTS SCRIPT_API_BINARY_FILES) file(STRINGS "${FILE}" LINES REGEX "^void SQ${APIUC}.*_Register\\(Squirrel \\*engine\\)$") diff --git a/media/baseset/openttd.grf b/media/baseset/openttd.grf index 837e4b12d2553699331ad6ba878d38afda6aa109..e3ebf2dd675589b31cdab66116ae5db1d72520bf 100644 GIT binary patch delta 44 zcmZ2IRenvIJPQlM|DBC2tt^bKEKIE|%&jaeTUl7ABJPQlM|ND(Btt^bKEKIE|%&jaeTUl7AHf_d?886r#a5K()!Ob}H1UJ*PnJ-vQh%wIG zA@+jjgyIE-7v>xMFm-Zo-@anf_DL(YZxf)R{c``pg|F&)0 zR&aNSbtrb|tnkHDRnL6x+&PdTj7cxJS@(g!3vR}w7hKGfC-cAHc_GHSZy*2U$q%?0 zlQt->FlS0i0)+*pIn4b0{2*h%ZiE}Tf}14?>R_fM!5!R~?ySGS#=LFcwinFo+qP{J z6x_G(2Im3p6Ji(SE^wdFzQBDz2U~!$f_?UanUVhi_X(aG+!rJ+aIUSG3a=Mz zFSuF3$@K;Q1MU}GOxq@(;AWmYdGZNvM*bUI4|FzQ)6T{W&jYN2f>4ix!WkYqIMUq( zHc(=i{GuM78gPazJ2=$4jz*5b6=|N zNOL_iRPW>$$}iL&fU*uZwyeX(&krh1UNFDlW|}L@6X{UNAEY3T`^U^Md;U&kJeB zeJi*xD6&ohfg9#GxL#llJecQia5MYW`Q6}V8}fE6(Ezu;z^c7m5# zP;kZzo*Pmupknd_?*r}=ycf7{NTKM3X`RduN=eLYlR;|1wLpj12C);`6R;NE%$qlF fhC7g-4_0k-=zz+H_8EDs?KAS&w$I38pArH9jlN{l diff --git a/media/baseset/openttd/flags.nfo b/media/baseset/openttd/flags.nfo deleted file mode 100644 index 3c125ec79a..0000000000 --- a/media/baseset/openttd/flags.nfo +++ /dev/null @@ -1,43 +0,0 @@ -// This file is part of OpenTTD. -// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . -// - -1 * 0 0C "Flag graphics" - -1 * 3 05 14 24 - -1 sprites/flags.png 8bpp 34 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 50 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 66 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 82 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 98 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 114 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 130 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 146 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 162 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 178 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 194 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 210 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 226 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 242 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 258 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 274 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 290 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 306 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 322 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 338 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 354 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 370 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 386 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 402 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 418 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 434 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 450 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 466 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 482 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 498 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 514 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 530 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 546 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 562 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 578 8 11 8 0 0 normal - -1 sprites/flags.png 8bpp 594 8 11 8 0 0 normal diff --git a/media/baseset/openttd/flags.png b/media/baseset/openttd/flags.png deleted file mode 100644 index 2e0401ffce5ca5255c45c91e645da4e53e2649cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1763 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%0AW(A5mRI`K#>0oLR6rC#<<~7E8cCF)i~K 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 RwY!6F{P^^ragp^+Jpc%4;iCWm literal 259680 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∾Xlp4INWZWqF~ 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%0D>>mIG{1p; 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 True/PM + PerMonitorV2,PerMonitor diff --git a/os/windows/winstore/generate-assets.bat b/os/windows/winstore/generate-assets.bat new file mode 100644 index 0000000000..387fd57b85 --- /dev/null +++ b/os/windows/winstore/generate-assets.bat @@ -0,0 +1,2 @@ +@echo off +powershell -File "%~dp0generate-assets.ps1" diff --git a/os/windows/winstore/generate-assets.ps1 b/os/windows/winstore/generate-assets.ps1 new file mode 100644 index 0000000000..89c48e6ecf --- /dev/null +++ b/os/windows/winstore/generate-assets.ps1 @@ -0,0 +1,48 @@ +function ResizeImage() { + param([String]$sourcePath, [Int]$targetWidth, [Int]$targetHeight, [String]$targetPath) + + Add-Type -AssemblyName "System.Drawing" + + $img = [System.Drawing.Image]::FromFile($sourcePath) + + $ratioX = $targetWidth / $img.Width; + $ratioY = $targetHeight / $img.Height; + + $ratio = $ratioY + + if ($ratioX -le $ratioY) { + $ratio = $ratioX + } + + $newWidth = [int] ($img.Width * $ratio) + $newHeight = [int] ($img.Height * $ratio) + + $resizedImage = New-Object System.Drawing.Bitmap($targetWidth, $targetHeight) + $graph = [System.Drawing.Graphics]::FromImage($resizedImage) + $graph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic + + $graph.Clear([System.Drawing.Color]::Transparent) + $graph.DrawImage($img, $targetWidth / 2 - $newWidth / 2, $targetHeight / 2 - $newHeight / 2, $newWidth, $newHeight) + + $resizedImage.Save($targetPath) + $resizedImage.Dispose() + $img.Dispose() +} + +$logoPath = "..\..\..\media\openttd.2048.png" + +# Create the main image assets required for the Windows Store +New-Item -Path "." -Name "assets" -ItemType "directory" -Force +ResizeImage $logoPath 1240 1240 "assets\LargeTile.png" +ResizeImage $logoPath 284 284 "assets\SmallTile.png" +ResizeImage $logoPath 2480 1200 "assets\SplashScreen.png" +ResizeImage $logoPath 176 176 "assets\Square44x44Logo.png" +Copy-Item "assets\Square44x44Logo.png" -Destination "assets\Square44x44Logo.targetsize-44_altform-unplated.png" +ResizeImage $logoPath 600 600 "assets\Square150x150Logo.png" +Copy-Item "assets\Square150x150Logo.png" -Destination "assets\Square150x150Logo.targetsize-150_altform-unplated.png" +ResizeImage $logoPath 200 200 "assets\StoreLogo.png" +ResizeImage $logoPath 1240 600 "assets\Wide310x150Logo.png" + +# Copy the logo for the store for the common package +New-Item -Path "." -Name "assets-common" -ItemType "directory" -Force +Copy-Item "assets\StoreLogo.png" -Destination "assets-common\StoreLogo.png" diff --git a/os/windows/winstore/generate-key.bat b/os/windows/winstore/generate-key.bat new file mode 100644 index 0000000000..859d595d9c --- /dev/null +++ b/os/windows/winstore/generate-key.bat @@ -0,0 +1,2 @@ +@echo off +powershell -File "%~dp0generate-key.ps1" %1 %2 %3 diff --git a/os/windows/winstore/generate-key.ps1 b/os/windows/winstore/generate-key.ps1 new file mode 100644 index 0000000000..f59eb038e4 --- /dev/null +++ b/os/windows/winstore/generate-key.ps1 @@ -0,0 +1,21 @@ +[CmdletBinding()] +[Alias()] +Param +( + # Publisher ("CN=xyz") + [Parameter(Mandatory=$true, Position=0)] + $Publisher, + + # Password + [Parameter(Mandatory=$true, Position=1)] + $PasswordParam, + + # Filename + [Parameter(Mandatory=$true, Position=2)] + $OutputFilename +) + +$cert = New-SelfSignedCertificate -Type Custom -Subject $Publisher -KeyUsage DigitalSignature -FriendlyName "OpenTTD signing certificate" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") + +$password = ConvertTo-SecureString -String $PasswordParam -Force -AsPlainText +Export-PfxCertificate -cert "Cert:\CurrentUser\My\$($cert.Thumbprint)" -FilePath $OutputFilename -Password $password diff --git a/os/windows/winstore/manifests/AssetsPackage.appxmanifest b/os/windows/winstore/manifests/AssetsPackage.appxmanifest new file mode 100644 index 0000000000..a0e8f29eda --- /dev/null +++ b/os/windows/winstore/manifests/AssetsPackage.appxmanifest @@ -0,0 +1,68 @@ + + + + + false + OpenTTD (official) + OpenTTD Developers + Assets\StoreLogoCommon.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/os/windows/winstore/manifests/Package.appxmanifest b/os/windows/winstore/manifests/Package.appxmanifest new file mode 100644 index 0000000000..7eb4a5c2b7 --- /dev/null +++ b/os/windows/winstore/manifests/Package.appxmanifest @@ -0,0 +1,83 @@ + + + + + OpenTTD (official) + OpenTTD Developers + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/os/windows/winstore/manifests/PackagingLayout.xml b/os/windows/winstore/manifests/PackagingLayout.xml new file mode 100644 index 0000000000..dc16e45fa8 --- /dev/null +++ b/os/windows/winstore/manifests/PackagingLayout.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/os/windows/winstore/prepare-manifests.bat b/os/windows/winstore/prepare-manifests.bat new file mode 100644 index 0000000000..634b51e5ff --- /dev/null +++ b/os/windows/winstore/prepare-manifests.bat @@ -0,0 +1,2 @@ +@echo off +powershell -File "%~dp0prepare-manifests.ps1" %1 %2 %3 %OTTD_VERSION% diff --git a/os/windows/winstore/prepare-manifests.ps1 b/os/windows/winstore/prepare-manifests.ps1 new file mode 100644 index 0000000000..4bd1f4cb2f --- /dev/null +++ b/os/windows/winstore/prepare-manifests.ps1 @@ -0,0 +1,42 @@ +[CmdletBinding()] +[Alias()] +Param +( + # Output folder + [Parameter(Mandatory=$true, Position=0)] + $OutputFolder, + + # Publisher ("CN=xyz") + [Parameter(Mandatory=$true, Position=1)] + $Publisher, + + # IdentityName + [Parameter(Mandatory=$true, Position=2)] + $IdentityName, + + # Version + [Parameter(Mandatory=$true, Position=3)] + $AppVersion +) + +function Prepare-Manifest { + param ( + $Architecture + ) + + (Get-Content "$($PSScriptRoot)\manifests\Package.appxmanifest").replace('$PUBLISHER$', $Publisher).replace('$IDENTITY_NAME$', $IdentityName).replace('$VERSION$', $AppVersion).replace('$ARCHITECTURE$', $Architecture) | Set-Content "$($OutputFolder)\Package-$($Architecture).appxmanifest" +} + +# Prepare the application binary manifests +Prepare-Manifest x86 +Prepare-Manifest x64 +Prepare-Manifest arm64 + +# Prepare the assets package manifest +(Get-Content "$($PSScriptRoot)\manifests\AssetsPackage.appxmanifest").replace('$PUBLISHER$', $Publisher).replace('$IDENTITY_NAME$', $IdentityName).replace('$VERSION$', $AppVersion) | Set-Content "$($OutputFolder)\AssetsPackage.appxmanifest" + +# Prepare the overall package manifest +(Get-Content "$($PSScriptRoot)\manifests\Package.appxmanifest").replace('$PUBLISHER$', $Publisher).replace('$IDENTITY_NAME$', $IdentityName).replace('$VERSION$', $AppVersion).replace(' ProcessorArchitecture="$ARCHITECTURE$"', '') | Set-Content "$($OutputFolder)\Package.appxmanifest" + +# Copy the PackagingLayout XML file +(Get-Content "$($PSScriptRoot)\manifests\PackagingLayout.xml") | Set-Content "$($OutputFolder)\PackagingLayout.xml" diff --git a/os/windows/winstore/set-version.bat b/os/windows/winstore/set-version.bat new file mode 100644 index 0000000000..f198661787 --- /dev/null +++ b/os/windows/winstore/set-version.bat @@ -0,0 +1,14 @@ +@echo off +if [%1]==[] goto err + +powershell -File "%~dp0set-version.ps1" %1 > "%temp%\ottd-set-version.bat" +if not errorlevel 0 goto err +call "%temp%\ottd-set-version.bat" +del /q "%temp%\ottd-set-version.bat" + +@rem Version number will now be in %OTTD_VERSION% + +goto :eof + +:err +echo Please supply the path of openttd.exe as the argument to this batch file. diff --git a/os/windows/winstore/set-version.ps1 b/os/windows/winstore/set-version.ps1 new file mode 100644 index 0000000000..ba048581e2 --- /dev/null +++ b/os/windows/winstore/set-version.ps1 @@ -0,0 +1,23 @@ +[CmdletBinding()] +[Alias()] +Param +( + # EXE path + [Parameter(Mandatory=$true, Position=0)] + $ExePath +) + +try +{ + $versionInfo = (Get-Item "$ExePath").VersionInfo + + # Generate the app version - the build number (MS calls it revision) is always 0 because the Windows Store requires that + $AppVersion = "$($versionInfo.FileMajorPart).$($versionInfo.FileMinorPart).$($versionInfo.FileBuildPart).0" + + Write-Output "SET OTTD_VERSION=$($AppVersion)" +} +catch +{ + Write-Output "@ECHO Error retrieving EXE version - did you provide a path?" + exit 1 +} diff --git a/regression/regression/info.nut b/regression/regression/info.nut index 1a52cfebbb..8799d98628 100644 --- a/regression/regression/info.nut +++ b/regression/regression/info.nut @@ -4,7 +4,7 @@ class Regression extends AIInfo { function GetShortName() { return "REGR"; } function GetDescription() { return "This runs regression-tests on some commands. On the same map the result should always be the same."; } function GetVersion() { return 1; } - function GetAPIVersion() { return "12"; } + function GetAPIVersion() { return "13"; } function GetDate() { return "2007-03-18"; } function CreateInstance() { return "Regression"; } function UseAsRandomAI() { return false; } diff --git a/regression/regression/main.nut b/regression/regression/main.nut index f32c708614..05d6f275bd 100644 --- a/regression/regression/main.nut +++ b/regression/regression/main.nut @@ -341,6 +341,7 @@ function Regression::Cargo() print(" GetCargoIncome(10, 10): " + AICargo.GetCargoIncome(i, 10, 10)); print(" GetCargoIncome(100, 10): " + AICargo.GetCargoIncome(i, 100, 10)); print(" GetCargoIncome(10, 100): " + AICargo.GetCargoIncome(i, 10, 100)); + print(" GetWeight(100): " + AICargo.GetWeight(i, 100)); print(" GetRoadVehicleTypeForCargo(): " + AIRoad.GetRoadVehicleTypeForCargo(i)); } } @@ -1023,6 +1024,30 @@ function Regression::Rail() print(" IsRailTile(): " + AIRail.IsRailTile(10002)); print(" BuildRailTrack(): " + AIRail.BuildRailTrack(10002, AIRail.RAILTRACK_NW_SE)); print(" BuildSignal(): " + AIRail.BuildSignal(10002, 10258, AIRail.SIGNALTYPE_PBS)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10258)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 9746)); + print(" RemoveSignal(): " + AIRail.RemoveSignal(10002, 10258)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 9746, AIRail.SIGNALTYPE_ENTRY)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10258)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 9746)); + print(" RemoveSignal(): " + AIRail.RemoveSignal(10002, 9746)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 9746, AIRail.SIGNALTYPE_EXIT_TWOWAY)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10258)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 9746)); + print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(10002, AIRail.RAILTRACK_NW_NE)); + print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(10002, AIRail.RAILTRACK_NW_SE)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(10002, AIRail.RAILTRACK_NW_NE)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 10003, AIRail.SIGNALTYPE_PBS)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10003)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10001)); + print(" RemoveSignal(): " + AIRail.RemoveSignal(10002, 10003)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 10001, AIRail.SIGNALTYPE_ENTRY)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10003)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10001)); + print(" RemoveSignal(): " + AIRail.RemoveSignal(10002, 10001)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 10001, AIRail.SIGNALTYPE_EXIT_TWOWAY)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10003)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10001)); print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(10002, AIRail.RAILTRACK_NW_NE)); print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(10002, AIRail.RAILTRACK_NW_SE)); print(" BuildRail(): " + AIRail.BuildRail(10002, 10003, 10006)); diff --git a/regression/regression/result.txt b/regression/regression/result.txt index 984c1de82b..27f90220dc 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -1118,6 +1118,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): -1 GetCargoIncome(100, 10): -1 GetCargoIncome(10, 100): -1 + GetWeight(100): -1 GetRoadVehicleTypeForCargo(): 1 Cargo 0 IsValidCargo(): true @@ -1130,6 +1131,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 3 GetCargoIncome(100, 10): 38 GetCargoIncome(10, 100): 3 + GetWeight(100): 6 GetRoadVehicleTypeForCargo(): 0 Cargo 1 IsValidCargo(): true @@ -1142,6 +1144,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 7 GetCargoIncome(100, 10): 71 GetCargoIncome(10, 100): 6 + GetWeight(100): 100 GetRoadVehicleTypeForCargo(): 1 Cargo 2 IsValidCargo(): true @@ -1154,6 +1157,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 5 GetCargoIncome(100, 10): 55 GetCargoIncome(10, 100): 5 + GetWeight(100): 25 GetRoadVehicleTypeForCargo(): 1 Cargo 3 IsValidCargo(): true @@ -1166,6 +1170,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 5 GetCargoIncome(100, 10): 53 GetCargoIncome(10, 100): 5 + GetWeight(100): 100 GetRoadVehicleTypeForCargo(): 1 Cargo 4 IsValidCargo(): true @@ -1178,6 +1183,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 5 GetCargoIncome(100, 10): 52 GetCargoIncome(10, 100): 4 + GetWeight(100): 18 GetRoadVehicleTypeForCargo(): 1 Cargo 5 IsValidCargo(): true @@ -1190,6 +1196,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 7 GetCargoIncome(100, 10): 74 GetCargoIncome(10, 100): 6 + GetWeight(100): 50 GetRoadVehicleTypeForCargo(): 1 Cargo 6 IsValidCargo(): true @@ -1202,6 +1209,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 5 GetCargoIncome(100, 10): 58 GetCargoIncome(10, 100): 4 + GetWeight(100): 100 GetRoadVehicleTypeForCargo(): 1 Cargo 7 IsValidCargo(): true @@ -1214,6 +1222,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 6 GetCargoIncome(100, 10): 60 GetCargoIncome(10, 100): 5 + GetWeight(100): 100 GetRoadVehicleTypeForCargo(): 1 Cargo 8 IsValidCargo(): true @@ -1226,6 +1235,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 6 GetCargoIncome(100, 10): 62 GetCargoIncome(10, 100): 5 + GetWeight(100): 100 GetRoadVehicleTypeForCargo(): 1 Cargo 9 IsValidCargo(): true @@ -1238,6 +1248,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 6 GetCargoIncome(100, 10): 69 GetCargoIncome(10, 100): 6 + GetWeight(100): 100 GetRoadVehicleTypeForCargo(): 1 Cargo 10 IsValidCargo(): true @@ -1250,6 +1261,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): 9 GetCargoIncome(100, 10): 90 GetCargoIncome(10, 100): 7 + GetWeight(100): 12 GetRoadVehicleTypeForCargo(): 1 Cargo 11 IsValidCargo(): false @@ -1262,6 +1274,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): -1 GetCargoIncome(100, 10): -1 GetCargoIncome(10, 100): -1 + GetWeight(100): -1 GetRoadVehicleTypeForCargo(): 1 Cargo 12 IsValidCargo(): false @@ -1274,6 +1287,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): -1 GetCargoIncome(100, 10): -1 GetCargoIncome(10, 100): -1 + GetWeight(100): -1 GetRoadVehicleTypeForCargo(): 1 Cargo 13 IsValidCargo(): false @@ -1286,6 +1300,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): -1 GetCargoIncome(100, 10): -1 GetCargoIncome(10, 100): -1 + GetWeight(100): -1 GetRoadVehicleTypeForCargo(): 1 Cargo 14 IsValidCargo(): false @@ -1298,6 +1313,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCargoIncome(10, 10): -1 GetCargoIncome(100, 10): -1 GetCargoIncome(10, 100): -1 + GetWeight(100): -1 GetRoadVehicleTypeForCargo(): 1 --CargoList-- @@ -7411,8 +7427,32 @@ ERROR: IsEnd() is invalid as Begin() is never called IsRailTile(): false BuildRailTrack(): true BuildSignal(): true + GetSignalType(): 4 + GetSignalType(): 255 + RemoveSignal(): true + BuildSignal(): true + GetSignalType(): 255 + GetSignalType(): 1 + RemoveSignal(): true + BuildSignal(): true + GetSignalType(): 10 + GetSignalType(): 10 RemoveRailTrack(): false RemoveRailTrack(): true + BuildRailTrack(): true + BuildSignal(): false + GetSignalType(): 255 + GetSignalType(): 255 + RemoveSignal(): false + BuildSignal(): true + GetSignalType(): 255 + GetSignalType(): 1 + RemoveSignal(): true + BuildSignal(): true + GetSignalType(): 255 + GetSignalType(): 10 + RemoveRailTrack(): true + RemoveRailTrack(): false BuildRail(): true HasTransportType(): true HasTransportType(): false @@ -9272,12 +9312,12 @@ ERROR: IsEnd() is invalid as Begin() is never called GetLocation(): 33417 GetEngineType(): 153 GetUnitNumber(): 1 - GetAge(): 1 + GetAge(): 0 GetMaxAge(): 5490 - GetAgeLeft(): 5489 + GetAgeLeft(): 5490 GetCurrentSpeed(): 7 GetRunningCost(): 421 - GetProfitThisYear(): -1 + GetProfitThisYear(): 0 GetProfitLastYear(): 0 GetCurrentValue(): 5947 GetVehicleType(): 1 @@ -9287,7 +9327,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsInDepot(): false GetNumWagons(): 1 GetWagonEngineType(): 153 - GetWagonAge(): 1 + GetWagonAge(): 0 GetLength(): 8 GetOwner(): 1 BuildVehicle(): 14 @@ -9360,11 +9400,11 @@ ERROR: IsEnd() is invalid as Begin() is never called 14 => 1 12 => 1 Age ListDump: + 17 => 1 + 16 => 1 + 14 => 1 13 => 1 12 => 1 - 17 => 0 - 16 => 0 - 14 => 0 MaxAge ListDump: 16 => 10980 14 => 10980 @@ -9372,9 +9412,9 @@ ERROR: IsEnd() is invalid as Begin() is never called 13 => 5490 12 => 5490 AgeLeft ListDump: - 16 => 10980 - 14 => 10980 - 17 => 7320 + 16 => 10979 + 14 => 10979 + 17 => 7319 13 => 5489 12 => 5489 CurrentSpeed ListDump: diff --git a/regression/stationlist/info.nut b/regression/stationlist/info.nut index ad91c7645c..099a7d12ec 100644 --- a/regression/stationlist/info.nut +++ b/regression/stationlist/info.nut @@ -4,7 +4,7 @@ class StationList extends AIInfo { function GetShortName() { return "REGS"; } function GetDescription() { return "This runs stationlist-tests on some commands. On the same map the result should always be the same."; } function GetVersion() { return 1; } - function GetAPIVersion() { return "12"; } + function GetAPIVersion() { return "13"; } function GetDate() { return "2007-03-18"; } function CreateInstance() { return "StationList"; } function UseAsRandomAI() { return false; } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 631eaf6dea..e526c5d595 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,6 +10,7 @@ add_subdirectory(3rdparty) add_subdirectory(ai) add_subdirectory(blitter) add_subdirectory(core) +add_subdirectory(fontcache) add_subdirectory(game) add_subdirectory(lang) add_subdirectory(linkgraph) @@ -29,18 +30,15 @@ add_files( viewport_sprite_sorter_sse4.cpp CONDITION SSE_FOUND ) -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") - set_compile_flags( - viewport_sprite_sorter_sse4.cpp - COMPILE_FLAGS -msse4.1) -endif() add_files( aircraft.h aircraft_cmd.cpp + aircraft_cmd.h aircraft_gui.cpp airport.cpp airport.h + airport_cmd.h airport_gui.cpp animated_tile.cpp animated_tile_func.h @@ -49,6 +47,7 @@ add_files( autoreplace.cpp autoreplace_base.h autoreplace_cmd.cpp + autoreplace_cmd.h autoreplace_func.h autoreplace_gui.cpp autoreplace_gui.h @@ -84,12 +83,12 @@ add_files( clear_cmd.cpp clear_func.h clear_map.h - cmd_helper.h command.cpp command_func.h command_type.h company_base.h company_cmd.cpp + company_cmd.h company_func.h company_gui.cpp company_gui.h @@ -119,6 +118,7 @@ add_files( depot.cpp depot_base.h depot_cmd.cpp + depot_cmd.h depot_func.h depot_gui.cpp depot_map.h @@ -127,11 +127,13 @@ add_files( direction_type.h disaster_vehicle.cpp disaster_vehicle.h + dock_cmd.h dock_gui.cpp driver.cpp driver.h economy.cpp economy_base.h + economy_cmd.h economy_func.h economy_type.h effectvehicle.cpp @@ -141,6 +143,7 @@ add_files( elrail_func.h engine.cpp engine_base.h + engine_cmd.h engine_func.h engine_gui.cpp engine_gui.h @@ -155,7 +158,6 @@ add_files( fios_gui.cpp fontcache.cpp fontcache.h - fontcache_internal.h fontdetection.h framerate_gui.cpp framerate_type.h @@ -174,6 +176,7 @@ add_files( gfxinit.h goal.cpp goal_base.h + goal_cmd.h goal_gui.cpp goal_type.h graph_gui.cpp @@ -182,6 +185,7 @@ add_files( ground_vehicle.hpp group.h group_cmd.cpp + group_cmd.h group_gui.cpp group_gui.h group_type.h @@ -198,6 +202,7 @@ add_files( house_type.h industry.h industry_cmd.cpp + industry_cmd.h industry_gui.cpp industry_map.h industry_type.h @@ -208,6 +213,7 @@ add_files( intro_gui.cpp landscape.cpp landscape.h + landscape_cmd.h landscape_type.h language.h livery.h @@ -217,6 +223,7 @@ add_files( map_type.h misc.cpp misc_cmd.cpp + misc_cmd.h misc_gui.cpp mixer.cpp mixer.h @@ -277,6 +284,7 @@ add_files( newgrf_town.h newgrf_townname.cpp newgrf_townname.h + news_cmd.h news_func.h news_gui.cpp news_gui.h @@ -284,6 +292,7 @@ add_files( object.h object_base.h object_cmd.cpp + object_cmd.h object_gui.cpp object_map.h object_type.h @@ -293,6 +302,7 @@ add_files( order_backup.h order_base.h order_cmd.cpp + order_cmd.h order_func.h order_gui.cpp order_type.h @@ -305,6 +315,7 @@ add_files( rail.cpp rail.h rail_cmd.cpp + rail_cmd.h rail_gui.cpp rail_gui.h rail_map.h @@ -327,6 +338,7 @@ add_files( roadstop_base.h roadveh.h roadveh_cmd.cpp + roadveh_cmd.h roadveh_gui.cpp safeguards.h screenshot_gui.cpp @@ -334,6 +346,7 @@ add_files( screenshot.cpp screenshot.h settings.cpp + settings_cmd.h settings_func.h settings_gui.cpp settings_gui.h @@ -343,6 +356,7 @@ add_files( settings_type.h ship.h ship_cmd.cpp + ship_cmd.h ship_gui.cpp signal.cpp signal_func.h @@ -350,6 +364,7 @@ add_files( signs.cpp signs_base.h signs_cmd.cpp + signs_cmd.h signs_func.h signs_gui.cpp signs_type.h @@ -368,6 +383,7 @@ add_files( station.cpp station_base.h station_cmd.cpp + station_cmd.h station_func.h station_gui.cpp station_gui.h @@ -379,6 +395,7 @@ add_files( stdafx.h story.cpp story_base.h + story_cmd.h story_gui.cpp story_type.h strgen/strgen.h @@ -393,11 +410,13 @@ add_files( strings_type.h subsidy.cpp subsidy_base.h + subsidy_cmd.h subsidy_func.h subsidy_gui.cpp subsidy_type.h tar_type.h terraform_cmd.cpp + terraform_cmd.h terraform_gui.cpp terraform_gui.h textbuf.cpp @@ -422,11 +441,13 @@ add_files( tilematrix_type.hpp timetable.h timetable_cmd.cpp + timetable_cmd.h timetable_gui.cpp toolbar_gui.cpp toolbar_gui.h town.h town_cmd.cpp + town_cmd.h town_gui.cpp town_kdtree.h town_map.h @@ -438,22 +459,26 @@ add_files( track_type.h train.h train_cmd.cpp + train_cmd.h train_gui.cpp transparency.h transparency_gui.cpp transparency_gui.h transport_type.h tree_cmd.cpp + tree_cmd.h tree_gui.cpp tree_map.h tunnel_map.cpp tunnel_map.h tunnelbridge.h tunnelbridge_cmd.cpp + tunnelbridge_cmd.h tunnelbridge_map.h vehicle.cpp vehicle_base.h vehicle_cmd.cpp + vehicle_cmd.h vehicle_func.h vehicle_gui.cpp vehicle_gui.h @@ -462,6 +487,7 @@ add_files( vehiclelist.cpp vehiclelist.h viewport.cpp + viewport_cmd.h viewport_func.h viewport_gui.cpp viewport_kdtree.h @@ -472,10 +498,12 @@ add_files( walltime_func.h water.h water_cmd.cpp + water_cmd.h water_map.h waypoint.cpp waypoint_base.h waypoint_cmd.cpp + waypoint_cmd.h waypoint_func.h waypoint_gui.cpp widget.cpp diff --git a/src/ai/ai.hpp b/src/ai/ai.hpp index 59886486fe..f9112fc177 100644 --- a/src/ai/ai.hpp +++ b/src/ai/ai.hpp @@ -139,9 +139,9 @@ public: static int GetStartNextTime(); /** Wrapper function for AIScanner::GetAIConsoleList */ - static char *GetConsoleList(char *p, const char *last, bool newest_only = false); + static std::string GetConsoleList(bool newest_only = false); /** Wrapper function for AIScanner::GetAIConsoleLibraryList */ - static char *GetConsoleLibraryList(char *p, const char *last); + static std::string GetConsoleLibraryList(); /** Wrapper function for AIScanner::GetAIInfoList */ static const ScriptInfoList *GetInfoList(); /** Wrapper function for AIScanner::GetUniqueAIInfoList */ diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index e45738776d..add76e0685 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -315,14 +315,14 @@ return DAYS_IN_YEAR; } -/* static */ char *AI::GetConsoleList(char *p, const char *last, bool newest_only) +/* static */ std::string AI::GetConsoleList(bool newest_only) { - return AI::scanner_info->GetConsoleList(p, last, newest_only); + return AI::scanner_info->GetConsoleList(newest_only); } -/* static */ char *AI::GetConsoleLibraryList(char *p, const char *last) +/* static */ std::string AI::GetConsoleLibraryList() { - return AI::scanner_library->GetConsoleList(p, last, true); + return AI::scanner_library->GetConsoleList(true); } /* static */ const ScriptInfoList *AI::GetInfoList() diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index c7ae4740e2..b97e9f72ea 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -28,6 +28,8 @@ #include "../hotkeys.h" #include "../core/geometry_func.hpp" #include "../guitimer_func.h" +#include "../company_cmd.h" +#include "../misc_cmd.h" #include "ai.hpp" #include "ai_gui.hpp" @@ -683,10 +685,10 @@ static const NWidgetPart _nested_ai_config_widgets[] = { NWidget(WWT_PANEL, COLOUR_MAUVE, WID_AIC_BACKGROUND), NWidget(NWID_VERTICAL), SetPIP(4, 4, 4), NWidget(NWID_HORIZONTAL), SetPIP(7, 0, 7), - NWidget(WWT_PUSHARROWBTN, COLOUR_YELLOW, WID_AIC_DECREASE), SetFill(0, 1), SetDataTip(AWV_DECREASE, STR_NULL), - NWidget(WWT_PUSHARROWBTN, COLOUR_YELLOW, WID_AIC_INCREASE), SetFill(0, 1), SetDataTip(AWV_INCREASE, STR_NULL), + NWidget(WWT_PUSHARROWBTN, COLOUR_YELLOW, WID_AIC_DECREASE), SetDataTip(AWV_DECREASE, STR_NULL), + NWidget(WWT_PUSHARROWBTN, COLOUR_YELLOW, WID_AIC_INCREASE), SetDataTip(AWV_INCREASE, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(6, 0), - NWidget(WWT_TEXT, COLOUR_MAUVE, WID_AIC_NUMBER), SetDataTip(STR_DIFFICULTY_LEVEL_SETTING_MAXIMUM_NO_COMPETITORS, STR_NULL), SetFill(1, 0), SetPadding(1, 0, 0, 0), + NWidget(WWT_TEXT, COLOUR_MAUVE, WID_AIC_NUMBER), SetDataTip(STR_DIFFICULTY_LEVEL_SETTING_MAXIMUM_NO_COMPETITORS, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7), NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_MOVE_UP), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_CONFIG_MOVE_UP, STR_AI_CONFIG_MOVE_UP_TOOLTIP), @@ -778,6 +780,11 @@ struct AIConfigWindow : public Window { void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { + case WID_AIC_DECREASE: + case WID_AIC_INCREASE: + *size = maxdim(*size, NWidgetScrollbar::GetHorizontalDimension()); + break; + case WID_AIC_GAMELIST: this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM; size->height = 1 * this->line_height; @@ -1290,8 +1297,8 @@ struct AIDebugWindow : public Window { case WID_AID_RELOAD_TOGGLE: if (ai_debug_company == OWNER_DEITY) break; /* First kill the company of the AI, then start a new one. This should start the current AI again */ - DoCommandP(0, CCA_DELETE | ai_debug_company << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL); - DoCommandP(0, CCA_NEW_AI | ai_debug_company << 16, 0, CMD_COMPANY_CTRL); + Command::Post(CCA_DELETE, ai_debug_company, CRR_MANUAL, INVALID_CLIENT_ID); + Command::Post(CCA_NEW_AI, ai_debug_company, CRR_NONE, INVALID_CLIENT_ID); break; case WID_AID_SETTINGS: @@ -1330,7 +1337,7 @@ struct AIDebugWindow : public Window { } if (all_unpaused) { /* All scripts have been unpaused => unpause the game. */ - DoCommandP(0, PM_PAUSED_NORMAL, 0, CMD_PAUSE); + Command::Post(PM_PAUSED_NORMAL, false); } } } @@ -1379,7 +1386,7 @@ struct AIDebugWindow : public Window { /* Pause the game. */ if ((_pause_mode & PM_PAUSED_NORMAL) == PM_UNPAUSED) { - DoCommandP(0, PM_PAUSED_NORMAL, 1, CMD_PAUSE); + Command::Post(PM_PAUSED_NORMAL, true); } /* Highlight row that matched */ diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 17ad012579..fcd1b5a1a9 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -25,7 +25,7 @@ */ static bool CheckAPIVersion(const char *api_version) { - static const std::set versions = { "0.7", "1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11", "12" }; + static const std::set versions = { "0.7", "1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11", "12", "13" }; return versions.find(api_version) != versions.end(); } diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index 9e1f001631..0e8355d733 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -18,6 +18,7 @@ #include "ai.hpp" #include "../script/script_storage.hpp" +#include "../script/script_cmd.h" #include "ai_info.hpp" #include "ai_instance.hpp" @@ -92,13 +93,13 @@ ScriptInfo *AIInstance::FindLibrary(const char *library, int version) /** * DoCommand callback function for all commands executed by AIs. + * @param cmd cmd as given to DoCommandPInternal. * @param result The result of the command. * @param tile The tile on which the command was executed. - * @param p1 p1 as given to DoCommandPInternal. - * @param p2 p2 as given to DoCommandPInternal. - * @param cmd cmd as given to DoCommandPInternal. + * @param data Command data as given to Command<>::Post. + * @param result_data Additional returned data from the command. */ -void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd) +void CcAI(Commands cmd, const CommandCost &result, TileIndex tile, const CommandDataBuffer &data, CommandDataBuffer result_data) { /* * The company might not exist anymore. Check for this. @@ -109,12 +110,12 @@ void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint3 const Company *c = Company::GetIfValid(_current_company); if (c == nullptr || c->ai_instance == nullptr) return; - if (c->ai_instance->DoCommandCallback(result, tile, p1, p2, cmd)) { + if (c->ai_instance->DoCommandCallback(result, tile, data, std::move(result_data), cmd)) { c->ai_instance->Continue(); } } -CommandCallback *AIInstance::GetDoCommandCallback() +CommandCallbackData *AIInstance::GetDoCommandCallback() { return &CcAI; } diff --git a/src/ai/ai_instance.hpp b/src/ai/ai_instance.hpp index f8d2100b1c..2cdabd9913 100644 --- a/src/ai/ai_instance.hpp +++ b/src/ai/ai_instance.hpp @@ -29,7 +29,7 @@ public: private: void RegisterAPI() override; void Died() override; - CommandCallback *GetDoCommandCallback() override; + CommandCallbackData *GetDoCommandCallback() override; void LoadDummyScript() override; }; diff --git a/src/aircraft.h b/src/aircraft.h index d201743a6f..0a5c0e5530 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -91,7 +91,7 @@ struct Aircraft FINAL : public SpecializedVehicle { void MarkDirty(); void UpdateDeltaXY(); - ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_AIRCRAFT_INC : EXPENSES_AIRCRAFT_RUN; } + 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; int GetDisplaySpeed() const { return this->cur_speed; } diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index f4f933982a..d67969c006 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -37,6 +37,8 @@ #include "disaster_vehicle.h" #include "newgrf_airporttiles.h" #include "framerate_type.h" +#include "aircraft_cmd.h" +#include "vehicle_cmd.h" #include "table/strings.h" @@ -188,7 +190,7 @@ void GetRotorImage(const Aircraft *v, EngineImageType image_type, VehicleSpriteS const Aircraft *w = v->Next()->Next(); if (is_custom_sprite(v->spritenum)) { - GetCustomRotorSprite(v, false, image_type, result); + GetCustomRotorSprite(v, image_type, result); if (result->IsValid()) return; } @@ -258,14 +260,13 @@ void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height, int &xoff /** * Build an aircraft. - * @param tile tile of the depot where aircraft is built. * @param flags type of operation. + * @param tile tile of the depot where aircraft is built. * @param e the engine to build. - * @param data unused. * @param[out] ret the vehicle that has been built. * @return the cost of this operation or an error. */ -CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **ret) +CommandCost CmdBuildAircraft(DoCommandFlag flags, TileIndex tile, const Engine *e, Vehicle **ret) { const AircraftVehicleInfo *avi = &e->u.air; const Station *st = Station::GetByTile(tile); @@ -327,8 +328,6 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine * v->reliability_spd_dec = e->reliability_spd_dec; v->max_age = e->GetLifeLengthInDays(); - _new_vehicle_id = v->index; - v->pos = GetVehiclePosOnBuild(tile); v->state = HANGAR; @@ -1274,7 +1273,7 @@ void HandleMissingAircraftOrders(Aircraft *v) const Station *st = GetTargetAirportIfValid(v); if (st == nullptr) { Backup cur_company(_current_company, v->owner, FILE_LINE); - CommandCost ret = DoCommand(v->tile, v->index, 0, DC_EXEC, CMD_SEND_VEHICLE_TO_DEPOT); + CommandCost ret = Command::Do(DC_EXEC, v->index, DepotCommand::None, {}); cur_company.Restore(); if (ret.Failed()) CrashAirplane(v); @@ -1341,7 +1340,12 @@ static void CrashAirplane(Aircraft *v) AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, vt, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING)); Game::NewEvent(new ScriptEventVehicleCrashed(v->index, vt, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING)); - AddTileNewsItem(newsitem, NT_ACCIDENT, vt, nullptr, st != nullptr ? st->index : INVALID_STATION); + NewsType newstype = NT_ACCIDENT; + if (v->owner != _local_company) { + newstype = NT_ACCIDENT_OTHER; + } + + AddTileNewsItem(newsitem, newstype, vt, nullptr, st != nullptr ? st->index : INVALID_STATION); ModifyStationRatingAround(vt, v->owner, -160, 30); if (_settings_client.sound.disaster) SndPlayVehicleFx(SND_12_EXPLOSION, v); @@ -1632,7 +1636,7 @@ static void AircraftEventHandler_HeliTakeOff(Aircraft *v, const AirportFTAClass /* Send the helicopter to a hangar if needed for replacement */ if (v->NeedsAutomaticServicing()) { Backup cur_company(_current_company, v->owner, FILE_LINE); - DoCommand(v->tile, v->index | DEPOT_SERVICE | DEPOT_LOCATE_HANGAR, 0, DC_EXEC, CMD_SEND_VEHICLE_TO_DEPOT); + Command::Do(DC_EXEC, v->index, DepotCommand::Service | DepotCommand::LocateHangar, {}); cur_company.Restore(); } } @@ -1683,7 +1687,7 @@ static void AircraftEventHandler_Landing(Aircraft *v, const AirportFTAClass *apc /* check if the aircraft needs to be replaced or renewed and send it to a hangar if needed */ if (v->NeedsAutomaticServicing()) { Backup cur_company(_current_company, v->owner, FILE_LINE); - DoCommand(v->tile, v->index | DEPOT_SERVICE, 0, DC_EXEC, CMD_SEND_VEHICLE_TO_DEPOT); + Command::Do(DC_EXEC, v->index, DepotCommand::Service, {}); cur_company.Restore(); } } diff --git a/src/aircraft_cmd.h b/src/aircraft_cmd.h new file mode 100644 index 0000000000..df58739a54 --- /dev/null +++ b/src/aircraft_cmd.h @@ -0,0 +1,19 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file aircraft_cmd.h Command definitions related to aircraft. */ + +#ifndef AIRCRAFT_CMD_H +#define AIRCRAFT_CMD_H + +#include "command_type.h" +#include "engine_type.h" +#include "vehicle_type.h" + +CommandCost CmdBuildAircraft(DoCommandFlag flags, TileIndex tile, const Engine *e, Vehicle **v); + +#endif /* AIRCRAFT_CMD_H */ diff --git a/src/aircraft_gui.cpp b/src/aircraft_gui.cpp index 311bc497bf..422f422002 100644 --- a/src/aircraft_gui.cpp +++ b/src/aircraft_gui.cpp @@ -100,7 +100,7 @@ void DrawAircraftImage(const Vehicle *v, int left, int right, int y, VehicleID s if (helicopter) { const Aircraft *a = Aircraft::From(v); VehicleSpriteSeq rotor_seq; - GetCustomRotorSprite(a, true, image_type, &rotor_seq); + GetCustomRotorSprite(a, image_type, &rotor_seq); if (!rotor_seq.IsValid()) rotor_seq.Set(SPR_ROTOR_STOPPED); heli_offs = ScaleGUITrad(5); rotor_seq.Draw(x, y + y_offs - heli_offs, PAL_NONE, false); diff --git a/src/airport_cmd.h b/src/airport_cmd.h new file mode 100644 index 0000000000..2e27057d8c --- /dev/null +++ b/src/airport_cmd.h @@ -0,0 +1,17 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file airport_cmd.h Command definitions related to airports. */ + +#ifndef AIRPORT_CMD_H +#define AIRPORT_CMD_H + +#include "command_type.h" + +CommandCallback CcBuildAirport; + +#endif /* AIRPORT_CMD_H */ diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 4d09fbdfdf..f8ef410d85 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -8,6 +8,7 @@ /** @file airport_gui.cpp The GUI for airports. */ #include "stdafx.h" +#include "economy_func.h" #include "window_gui.h" #include "station_gui.h" #include "terraform_gui.h" @@ -26,6 +27,10 @@ #include "hotkeys.h" #include "vehicle_func.h" #include "gui.h" +#include "command_func.h" +#include "airport_cmd.h" +#include "station_cmd.h" +#include "zoom_func.h" #include "widgets/airport_widget.h" @@ -40,7 +45,7 @@ static void ShowBuildAirportPicker(Window *parent); SpriteID GetCustomAirportSprite(const AirportSpec *as, byte layout); -void CcBuildAirport(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd) +void CcBuildAirport(Commands cmd, const CommandCost &result, TileIndex tile) { if (result.Failed()) return; @@ -55,13 +60,20 @@ void CcBuildAirport(const CommandCost &result, TileIndex tile, uint32 p1, uint32 static void PlaceAirport(TileIndex tile) { if (_selected_airport_index == -1) return; - uint32 p2 = _ctrl_pressed; - SB(p2, 16, 16, INVALID_STATION); // no station to join - uint32 p1 = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index)->GetIndex(); - p1 |= _selected_airport_layout << 8; - CommandContainer cmdcont = { tile, p1, p2, CMD_BUILD_AIRPORT | CMD_MSG(STR_ERROR_CAN_T_BUILD_AIRPORT_HERE), CcBuildAirport, "" }; - ShowSelectStationIfNeeded(cmdcont, TileArea(tile, _thd.size.x / TILE_SIZE, _thd.size.y / TILE_SIZE)); + byte airport_type = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index)->GetIndex(); + byte layout = _selected_airport_layout; + bool adjacent = _ctrl_pressed; + + auto proc = [=](bool test, StationID to_join) -> bool { + if (test) { + return Command::Do(CommandFlagsToDCFlags(GetCommandFlags()), tile, airport_type, layout, INVALID_STATION, adjacent).Succeeded(); + } else { + return Command::Post(STR_ERROR_CAN_T_BUILD_AIRPORT_HERE, CcBuildAirport, tile, airport_type, layout, to_join, adjacent); + } + }; + + ShowSelectStationIfNeeded(TileArea(tile, _thd.size.x / TILE_SIZE, _thd.size.y / TILE_SIZE), proc); } /** Airport build toolbar window handler. */ @@ -413,11 +425,8 @@ public: { this->DrawWidgets(); - uint16 top = this->GetWidget(WID_AP_BTN_DOHILIGHT)->pos_y + this->GetWidget(WID_AP_BTN_DOHILIGHT)->current_y + WD_PAR_VSEP_NORMAL; - NWidgetBase *panel_nwi = this->GetWidget(WID_AP_BOTTOMPANEL); - - int right = panel_nwi->pos_x + panel_nwi->current_x; - int bottom = panel_nwi->pos_y + panel_nwi->current_y; + Rect r = this->GetWidget(WID_AP_ACCEPTANCE)->GetCurrentRect(); + int top = r.top + ScaleGUITrad(WD_PAR_VSEP_NORMAL); if (_selected_airport_index != -1) { const AirportSpec *as = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index); @@ -427,20 +436,27 @@ public: if (_settings_game.economy.station_noise_level) { /* show the noise of the selected airport */ SetDParam(0, as->noise_level); - DrawString(panel_nwi->pos_x + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, STR_STATION_BUILD_NOISE); - top += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL; + DrawString(r.left, r.right, top, STR_STATION_BUILD_NOISE); + top += FONT_HEIGHT_NORMAL + ScaleGUITrad(WD_PAR_VSEP_NORMAL); + } + + if (_settings_game.economy.infrastructure_maintenance) { + Money monthly = _price[PR_INFRASTRUCTURE_AIRPORT] * as->maintenance_cost >> 3; + SetDParam(0, monthly * 12); + DrawString(r.left, r.right, top, STR_STATION_BUILD_INFRASTRUCTURE_COST); + top += FONT_HEIGHT_NORMAL + ScaleGUITrad(WD_PAR_VSEP_NORMAL); } /* strings such as 'Size' and 'Coverage Area' */ - top = DrawStationCoverageAreaText(panel_nwi->pos_x + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, SCT_ALL, rad, false) + WD_PAR_VSEP_NORMAL; - top = DrawStationCoverageAreaText(panel_nwi->pos_x + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, SCT_ALL, rad, true) + WD_PAR_VSEP_NORMAL; + top = DrawStationCoverageAreaText(r.left, r.right, top, SCT_ALL, rad, false) + ScaleGUITrad(WD_PAR_VSEP_NORMAL); + top = DrawStationCoverageAreaText(r.left, r.right, top, SCT_ALL, rad, true) + ScaleGUITrad(WD_PAR_VSEP_NORMAL); } /* Resize background if the window is too small. * Never make the window smaller to avoid oscillating if the size change affects the acceptance. * (This is the case, if making the window bigger moves the mouse into the window.) */ - if (top > bottom) { - ResizeWindow(this, 0, top - bottom, false); + if (top > r.bottom) { + ResizeWindow(this, 0, top - r.bottom, false); } } @@ -586,8 +602,8 @@ static const NWidgetPart _nested_build_airport_widgets[] = { NWidget(WWT_EMPTY, COLOUR_DARK_GREEN, WID_AP_EXTRA_TEXT), SetFill(1, 0), SetMinimalSize(150, 0), EndContainer(), /* Bottom panel. */ - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_AP_BOTTOMPANEL), SetPIP(2, 2, 2), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetFill(1, 0), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_AP_BOTTOMPANEL), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetPadding(WD_FRAMERECT_TOP, WD_FRAMERECT_RIGHT, WD_FRAMERECT_BOTTOM, WD_FRAMERECT_LEFT), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetFill(1, 0), NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetMinimalSize(14, 0), SetFill(1, 0), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), @@ -598,7 +614,7 @@ static const NWidgetPart _nested_build_airport_widgets[] = { EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(14, 0), SetFill(1, 0), EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 10), SetResize(0, 1), SetFill(1, 0), + NWidget(WWT_EMPTY, COLOUR_DARK_GREEN, WID_AP_ACCEPTANCE), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT), SetResize(0, 1), SetFill(1, 0), EndContainer(), }; diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index 4f9cf92bb4..654003e39e 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -22,6 +22,11 @@ #include "ai/ai.hpp" #include "news_func.h" #include "strings_func.h" +#include "autoreplace_cmd.h" +#include "group_cmd.h" +#include "order_cmd.h" +#include "train_cmd.h" +#include "vehicle_cmd.h" #include "table/strings.h" @@ -206,7 +211,7 @@ static int GetIncompatibleRefitOrderIdForAutoreplace(const Vehicle *v, EngineID const Order *o; const Vehicle *u = (v->type == VEH_TRAIN) ? v->First() : v; - const OrderList *orders = u->orders.list; + const OrderList *orders = u->orders; if (orders == nullptr) return -1; for (VehicleOrderID i = 0; i < orders->GetNumOrders(); i++) { o = orders->GetOrderAt(i); @@ -340,23 +345,24 @@ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehic } /* Build the new vehicle */ - cost = DoCommand(old_veh->tile, e | (CT_INVALID << 24), 0, DC_EXEC | DC_AUTOREPLACE, GetCmdBuildVeh(old_veh)); + VehicleID new_veh_id; + std::tie(cost, new_veh_id, std::ignore, std::ignore) = Command::Do(DC_EXEC | DC_AUTOREPLACE, old_veh->tile, e, true, CT_INVALID, INVALID_CLIENT_ID); if (cost.Failed()) return cost; - Vehicle *new_veh = Vehicle::Get(_new_vehicle_id); + Vehicle *new_veh = Vehicle::Get(new_veh_id); *new_vehicle = new_veh; /* Refit the vehicle if needed */ if (refit_cargo != CT_NO_REFIT) { byte subtype = GetBestFittingSubType(old_veh, new_veh, refit_cargo); - cost.AddCost(DoCommand(0, new_veh->index, refit_cargo | (subtype << 8), DC_EXEC, GetCmdRefitVeh(new_veh))); + cost.AddCost(std::get<0>(Command::Do(DC_EXEC, new_veh->index, refit_cargo, subtype, false, false, 0))); assert(cost.Succeeded()); // This should be ensured by GetNewCargoTypeForReplace() } /* Try to reverse the vehicle, but do not care if it fails as the new type might not be reversible */ if (new_veh->type == VEH_TRAIN && HasBit(Train::From(old_veh)->flags, VRF_REVERSE_DIRECTION)) { - DoCommand(0, new_veh->index, true, DC_EXEC, CMD_REVERSE_TRAIN_DIRECTION); + Command::Do(DC_EXEC, new_veh->index, true); } return cost; @@ -368,9 +374,9 @@ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehic * @param evaluate_callback shall the start/stop callback be evaluated? * @return success or error */ -static inline CommandCost CmdStartStopVehicle(const Vehicle *v, bool evaluate_callback) +static inline CommandCost DoCmdStartStopVehicle(const Vehicle *v, bool evaluate_callback) { - return DoCommand(0, v->index, evaluate_callback ? 1 : 0, DC_EXEC | DC_AUTOREPLACE, CMD_START_STOP_VEHICLE); + return Command::Do(DC_EXEC | DC_AUTOREPLACE, v->index, evaluate_callback); } /** @@ -383,7 +389,7 @@ static inline CommandCost CmdStartStopVehicle(const Vehicle *v, bool evaluate_ca */ static inline CommandCost CmdMoveVehicle(const Vehicle *v, const Vehicle *after, DoCommandFlag flags, bool whole_chain) { - return DoCommand(0, v->index | (whole_chain ? 1 : 0) << 20, after != nullptr ? after->index : INVALID_VEHICLE, flags | DC_NO_CARGO_CAP_CHECK, CMD_MOVE_RAIL_VEHICLE); + return Command::Do(flags | DC_NO_CARGO_CAP_CHECK, v->index, after != nullptr ? after->index : INVALID_VEHICLE, whole_chain); } /** @@ -397,19 +403,19 @@ static CommandCost CopyHeadSpecificThings(Vehicle *old_head, Vehicle *new_head, CommandCost cost = CommandCost(); /* Share orders */ - if (cost.Succeeded() && old_head != new_head) cost.AddCost(DoCommand(0, new_head->index | CO_SHARE << 30, old_head->index, DC_EXEC, CMD_CLONE_ORDER)); + if (cost.Succeeded() && old_head != new_head) cost.AddCost(Command::Do(DC_EXEC, CO_SHARE, new_head->index, old_head->index)); /* Copy group membership */ - if (cost.Succeeded() && old_head != new_head) cost.AddCost(DoCommand(0, old_head->group_id, new_head->index, DC_EXEC, CMD_ADD_VEHICLE_GROUP)); + if (cost.Succeeded() && old_head != new_head) cost.AddCost(std::get<0>(Command::Do(DC_EXEC, old_head->group_id, new_head->index, false))); /* Perform start/stop check whether the new vehicle suits newgrf restrictions etc. */ if (cost.Succeeded()) { /* Start the vehicle, might be denied by certain things */ assert((new_head->vehstatus & VS_STOPPED) != 0); - cost.AddCost(CmdStartStopVehicle(new_head, true)); + cost.AddCost(DoCmdStartStopVehicle(new_head, true)); /* Stop the vehicle again, but do not care about evil newgrfs allowing starting but not stopping :p */ - if (cost.Succeeded()) cost.AddCost(CmdStartStopVehicle(new_head, false)); + if (cost.Succeeded()) cost.AddCost(DoCmdStartStopVehicle(new_head, false)); } /* Last do those things which do never fail (resp. we do not care about), but which are not undo-able */ @@ -466,11 +472,11 @@ static CommandCost ReplaceFreeUnit(Vehicle **single_unit, DoCommandFlag flags, b } /* Sell the old vehicle */ - cost.AddCost(DoCommand(0, old_v->index, 0, flags, GetCmdSellVeh(old_v))); + cost.AddCost(Command::Do(flags, old_v->index, false, false, INVALID_CLIENT_ID)); /* If we are not in DC_EXEC undo everything */ if ((flags & DC_EXEC) == 0) { - DoCommand(0, new_v->index, 0, DC_EXEC, GetCmdSellVeh(new_v)); + Command::Do(DC_EXEC, new_v->index, false, false, INVALID_CLIENT_ID); } } @@ -597,7 +603,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon assert(RailVehInfo(wagon->engine_type)->railveh_type == RAILVEH_WAGON); /* Sell wagon */ - [[maybe_unused]] CommandCost ret = DoCommand(0, wagon->index, 0, DC_EXEC, GetCmdSellVeh(wagon)); + [[maybe_unused]] CommandCost ret = Command::Do(DC_EXEC, wagon->index, false, false, INVALID_CLIENT_ID); assert(ret.Succeeded()); new_vehs[i] = nullptr; @@ -629,7 +635,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon /* Sell the vehicle. * Note: This might temporarily construct new trains, so use DC_AUTOREPLACE to prevent * it from failing due to engine limits. */ - cost.AddCost(DoCommand(0, w->index, 0, flags | DC_AUTOREPLACE, GetCmdSellVeh(w))); + cost.AddCost(Command::Do(flags | DC_AUTOREPLACE, w->index, false, false, INVALID_CLIENT_ID)); if ((flags & DC_EXEC) != 0) { old_vehs[i] = nullptr; if (i == 0) old_head = nullptr; @@ -660,7 +666,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon if ((flags & DC_EXEC) == 0) { for (int i = num_units - 1; i >= 0; i--) { if (new_vehs[i] != nullptr) { - DoCommand(0, new_vehs[i]->index, 0, DC_EXEC, GetCmdSellVeh(new_vehs[i])); + Command::Do(DC_EXEC, new_vehs[i]->index, false, false, INVALID_CLIENT_ID); new_vehs[i] = nullptr; } } @@ -691,12 +697,12 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon } /* Sell the old vehicle */ - cost.AddCost(DoCommand(0, old_head->index, 0, flags, GetCmdSellVeh(old_head))); + cost.AddCost(Command::Do(flags, old_head->index, false, false, INVALID_CLIENT_ID)); } /* If we are not in DC_EXEC undo everything */ if ((flags & DC_EXEC) == 0) { - DoCommand(0, new_head->index, 0, DC_EXEC, GetCmdSellVeh(new_head)); + Command::Do(DC_EXEC, new_head->index, false, false, INVALID_CLIENT_ID); } } } @@ -707,22 +713,18 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon /** * Autoreplaces a vehicle * Trains are replaced as a whole chain, free wagons in depot are replaced on their own - * @param tile not used * @param flags type of operation - * @param p1 Index of vehicle - * @param p2 not used - * @param text unused + * @param veh_id Index of vehicle * @return the cost of this operation or an error */ -CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const std::string &text) +CommandCost CmdAutoreplaceVehicle(DoCommandFlag flags, VehicleID veh_id) { - Vehicle *v = Vehicle::GetIfValid(p1); + Vehicle *v = Vehicle::GetIfValid(veh_id); if (v == nullptr) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; - if (!v->IsChainInDepot()) return CMD_ERROR; if (v->vehstatus & VS_CRASHED) return CMD_ERROR; bool free_wagon = false; @@ -734,6 +736,7 @@ CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1 } else { if (!v->IsPrimaryVehicle()) return CMD_ERROR; } + if (!v->IsChainInDepot()) return CMD_ERROR; const Company *c = Company::Get(_current_company); bool wagon_removal = c->settings.renew_keep_length; @@ -759,7 +762,7 @@ CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1 bool was_stopped = free_wagon || ((v->vehstatus & VS_STOPPED) != 0); /* Stop the vehicle */ - if (!was_stopped) cost.AddCost(CmdStartStopVehicle(v, true)); + if (!was_stopped) cost.AddCost(DoCmdStartStopVehicle(v, true)); if (cost.Failed()) return cost; assert(free_wagon || v->IsStoppedInDepot()); @@ -787,7 +790,7 @@ CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1 } /* Restart the vehicle */ - if (!was_stopped) cost.AddCost(CmdStartStopVehicle(v, false)); + if (!was_stopped) cost.AddCost(DoCmdStartStopVehicle(v, false)); } if (cost.Succeeded() && nothing_to_do) cost = CommandCost(STR_ERROR_AUTOREPLACE_NOTHING_TO_DO); @@ -796,35 +799,29 @@ CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1 /** * Change engine renewal parameters - * @param tile unused * @param flags operation to perform - * @param p1 packed data - * - bit 0 = replace when engine gets old? - * - bits 16-31 = engine group - * @param p2 packed data - * - bits 0-15 = old engine type - * - bits 16-31 = new engine type - * @param text unused + * @param id_g engine group + * @param old_engine_type old engine type + * @param new_engine_type new engine type + * @param when_old replace when engine gets old? * @return the cost of this operation or an error */ -CommandCost CmdSetAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const std::string &text) +CommandCost CmdSetAutoReplace(DoCommandFlag flags, GroupID id_g, EngineID old_engine_type, EngineID new_engine_type, bool when_old) { Company *c = Company::GetIfValid(_current_company); if (c == nullptr) return CMD_ERROR; - EngineID old_engine_type = GB(p2, 0, 16); - EngineID new_engine_type = GB(p2, 16, 16); - GroupID id_g = GB(p1, 16, 16); CommandCost cost; if (Group::IsValidID(id_g) ? Group::Get(id_g)->owner != _current_company : !IsAllGroupID(id_g) && !IsDefaultGroupID(id_g)) return CMD_ERROR; if (!Engine::IsValidID(old_engine_type)) return CMD_ERROR; + if (Group::IsValidID(id_g) && Group::Get(id_g)->vehicle_type != Engine::Get(old_engine_type)->type) return CMD_ERROR; if (new_engine_type != INVALID_ENGINE) { if (!Engine::IsValidID(new_engine_type)) return CMD_ERROR; if (!CheckAutoreplaceValidity(old_engine_type, new_engine_type, _current_company)) return CMD_ERROR; - cost = AddEngineReplacementForCompany(c, old_engine_type, new_engine_type, id_g, HasBit(p1, 0), flags); + cost = AddEngineReplacementForCompany(c, old_engine_type, new_engine_type, id_g, when_old, flags); } else { cost = RemoveEngineReplacementForCompany(c, old_engine_type, id_g, flags); } diff --git a/src/autoreplace_cmd.h b/src/autoreplace_cmd.h new file mode 100644 index 0000000000..c42e740c93 --- /dev/null +++ b/src/autoreplace_cmd.h @@ -0,0 +1,24 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file autoreplace_cmd.h Command definitions related to autoreplace. */ + +#ifndef AUTOREPLACE_CMD_H +#define AUTOREPLACE_CMD_H + +#include "command_type.h" +#include "vehicle_type.h" +#include "engine_type.h" +#include "group_type.h" + +CommandCost CmdAutoreplaceVehicle(DoCommandFlag flags, VehicleID veh_id); +CommandCost CmdSetAutoReplace(DoCommandFlag flags, GroupID id_g, EngineID old_engine_type, EngineID new_engine_type, bool when_old); + +DEF_CMD_TRAIT(CMD_AUTOREPLACE_VEHICLE, CmdAutoreplaceVehicle, 0, CMDT_VEHICLE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_AUTOREPLACE, CmdSetAutoReplace, 0, CMDT_VEHICLE_MANAGEMENT) + +#endif /* AUTOREPLACE_CMD_H */ diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 9f2deaf10a..4dae0eedc7 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -25,6 +25,9 @@ #include "rail_gui.h" #include "road_gui.h" #include "widgets/dropdown_func.h" +#include "autoreplace_cmd.h" +#include "group_cmd.h" +#include "settings_cmd.h" #include "widgets/autoreplace_widget.h" @@ -217,7 +220,7 @@ class ReplaceVehicleWindow : public Window { { EngineID veh_from = this->sel_engine[0]; EngineID veh_to = this->sel_engine[1]; - DoCommandP(0, (replace_when_old ? 1 : 0) | (this->sel_group << 16), veh_from + (veh_to << 16), CMD_SET_AUTOREPLACE); + Command::Post(this->sel_group, veh_from, veh_to, replace_when_old); } public: @@ -541,10 +544,10 @@ public: case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: { const Group *g = Group::GetIfValid(this->sel_group); if (g != nullptr) { - DoCommandP(0, this->sel_group | (GroupFlags::GF_REPLACE_WAGON_REMOVAL << 16), (HasBit(g->flags, GroupFlags::GF_REPLACE_WAGON_REMOVAL) ? 0 : 1) | (_ctrl_pressed << 1), CMD_SET_GROUP_FLAG); + Command::Post(this->sel_group, GroupFlags::GF_REPLACE_WAGON_REMOVAL, !HasBit(g->flags, GroupFlags::GF_REPLACE_WAGON_REMOVAL), _ctrl_pressed); } else { // toggle renew_keep_length - DoCommandP(0, 0, Company::Get(_local_company)->settings.renew_keep_length ? 0 : 1, CMD_CHANGE_COMPANY_SETTING, nullptr, "company.renew_keep_length"); + Command::Post("company.renew_keep_length", Company::Get(_local_company)->settings.renew_keep_length ? 0 : 1); } break; } @@ -562,7 +565,7 @@ public: case WID_RV_STOP_REPLACE: { // Stop replacing EngineID veh_from = this->sel_engine[0]; - DoCommandP(0, this->sel_group << 16, veh_from + (INVALID_ENGINE << 16), CMD_SET_AUTOREPLACE); + Command::Post(this->sel_group, veh_from, INVALID_ENGINE, false); break; } @@ -578,6 +581,16 @@ public: size_t engine_count = this->engines[click_side].size(); EngineID e = engine_count > i ? this->engines[click_side][i] : INVALID_ENGINE; + + /* If Ctrl is pressed on the left side and we don't have any engines of the selected type, stop autoreplacing. + * This is most common when we have finished autoreplacing the engine and want to remove it from the list. */ + if (click_side == 0 && _ctrl_pressed && e != INVALID_ENGINE && + (GetGroupNumEngines(_local_company, sel_group, e) == 0 || GetGroupNumEngines(_local_company, ALL_GROUP, e) == 0)) { + EngineID veh_from = e; + Command::Post(this->sel_group, veh_from, INVALID_ENGINE, false); + break; + } + if (e == this->sel_engine[click_side]) break; // we clicked the one we already selected this->sel_engine[click_side] = e; if (click_side == 0) { diff --git a/src/blitter/32bpp_anim_sse2.cpp b/src/blitter/32bpp_anim_sse2.cpp index ee243cc21e..117e6ec5c2 100644 --- a/src/blitter/32bpp_anim_sse2.cpp +++ b/src/blitter/32bpp_anim_sse2.cpp @@ -19,6 +19,7 @@ /** Instantiation of the partially SSSE2 32bpp with animation blitter factory. */ static FBlitter_32bppSSE2_Anim iFBlitter_32bppSSE2_Anim; +GNU_TARGET("sse2") void Blitter_32bppSSE2_Anim::PaletteAnimate(const Palette &palette) { assert(!_screen_disable_anim); diff --git a/src/blitter/32bpp_anim_sse2.hpp b/src/blitter/32bpp_anim_sse2.hpp index 8b84f703e7..669cef80a7 100644 --- a/src/blitter/32bpp_anim_sse2.hpp +++ b/src/blitter/32bpp_anim_sse2.hpp @@ -16,6 +16,10 @@ #define SSE_VERSION 2 #endif +#ifndef SSE_TARGET +#define SSE_TARGET "sse2" +#endif + #ifndef FULL_ANIMATION #define FULL_ANIMATION 1 #endif diff --git a/src/blitter/32bpp_anim_sse4.cpp b/src/blitter/32bpp_anim_sse4.cpp index adfe625287..93c9cb20c6 100644 --- a/src/blitter/32bpp_anim_sse4.cpp +++ b/src/blitter/32bpp_anim_sse4.cpp @@ -29,6 +29,7 @@ static FBlitter_32bppSSE4_Anim iFBlitter_32bppSSE4_Anim; */ IGNORE_UNINITIALIZED_WARNING_START template +GNU_TARGET("sse4.1") inline void Blitter_32bppSSE4_Anim::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom) { const byte * const remap = bp->remap; @@ -52,6 +53,7 @@ inline void Blitter_32bppSSE4_Anim::Draw(const Blitter::BlitterParams *bp, ZoomL const __m128i a_cm = ALPHA_CONTROL_MASK; const __m128i pack_low_cm = PACK_LOW_CONTROL_MASK; const __m128i tr_nom_base = TRANSPARENT_NOM_BASE; + const __m128i a_am = ALPHA_AND_MASK; for (int y = bp->height; y != 0; y--) { Colour *dst = dst_line; @@ -143,7 +145,7 @@ inline void Blitter_32bppSSE4_Anim::Draw(const Blitter::BlitterParams *bp, ZoomL /* Blend colours. */ bmno_alpha_blend: - srcABCD = AlphaBlendTwoPixels(srcABCD, dstABCD, a_cm, pack_low_cm); + srcABCD = AlphaBlendTwoPixels(srcABCD, dstABCD, a_cm, pack_low_cm, a_am); bmno_full_opacity: _mm_storel_epi64((__m128i *) dst, srcABCD); bmno_full_transparency: @@ -170,7 +172,7 @@ bmno_full_transparency: } else { srcABCD = _mm_cvtsi32_si128(src->data); } - dst->data = _mm_cvtsi128_si32(AlphaBlendTwoPixels(srcABCD, dstABCD, a_cm, pack_low_cm)); + dst->data = _mm_cvtsi128_si32(AlphaBlendTwoPixels(srcABCD, dstABCD, a_cm, pack_low_cm, a_am)); } } break; @@ -254,7 +256,7 @@ bmno_full_transparency: /* Blend colours. */ bmcr_alpha_blend: - srcABCD = AlphaBlendTwoPixels(srcABCD, dstABCD, a_cm, pack_low_cm); + srcABCD = AlphaBlendTwoPixels(srcABCD, dstABCD, a_cm, pack_low_cm, a_am); bmcr_full_opacity: _mm_storel_epi64((__m128i *) dst, srcABCD); bmcr_full_transparency: @@ -287,7 +289,7 @@ bmcr_full_transparency: if (src->a < 255) { bmcr_alpha_blend_single: __m128i dstABCD = _mm_cvtsi32_si128(dst->data); - srcABCD = AlphaBlendTwoPixels(srcABCD, dstABCD, a_cm, pack_low_cm); + srcABCD = AlphaBlendTwoPixels(srcABCD, dstABCD, a_cm, pack_low_cm, a_am); } dst->data = _mm_cvtsi128_si32(srcABCD); } @@ -366,6 +368,12 @@ IGNORE_UNINITIALIZED_WARNING_STOP */ void Blitter_32bppSSE4_Anim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) { + if (_screen_disable_anim) { + /* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent Draw() */ + Blitter_32bppSSE4::Draw(bp, mode, zoom); + return; + } + const Blitter_32bppSSE_Base::SpriteFlags sprite_flags = ((const Blitter_32bppSSE_Base::SpriteData *) bp->sprite)->flags; switch (mode) { default: { diff --git a/src/blitter/32bpp_anim_sse4.hpp b/src/blitter/32bpp_anim_sse4.hpp index 7674182a8f..1b32e085c5 100644 --- a/src/blitter/32bpp_anim_sse4.hpp +++ b/src/blitter/32bpp_anim_sse4.hpp @@ -16,6 +16,10 @@ #define SSE_VERSION 4 #endif +#ifndef SSE_TARGET +#define SSE_TARGET "sse4.1" +#endif + #ifndef FULL_ANIMATION #define FULL_ANIMATION 1 #endif @@ -28,7 +32,7 @@ #define MARGIN_NORMAL_THRESHOLD 4 /** The SSE4 32 bpp blitter with palette animation. */ -class Blitter_32bppSSE4_Anim FINAL : public Blitter_32bppSSE2_Anim, public Blitter_32bppSSE_Base { +class Blitter_32bppSSE4_Anim FINAL : public Blitter_32bppSSE2_Anim, public Blitter_32bppSSE4 { private: public: @@ -39,13 +43,14 @@ public: return Blitter_32bppSSE_Base::Encode(sprite, allocator); } const char *GetName() override { return "32bpp-sse4-anim"; } + using Blitter_32bppSSE2_Anim::LookupColourInPalette; }; /** Factory for the SSE4 32 bpp blitter (with palette animation). */ class FBlitter_32bppSSE4_Anim: public BlitterFactory { public: FBlitter_32bppSSE4_Anim() : BlitterFactory("32bpp-sse4-anim", "32bpp SSE4 Blitter (palette animation)", HasCPUIDFlag(1, 2, 19)) {} - Blitter *CreateInstance() override { return new Blitter_32bppSSE4_Anim(); } + Blitter *CreateInstance() override { return static_cast(new Blitter_32bppSSE4_Anim()); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index 12105516f8..445fa97eb5 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -16,6 +16,10 @@ #define SSE_VERSION 2 #endif +#ifndef SSE_TARGET +#define SSE_TARGET "sse2" +#endif + #ifndef FULL_ANIMATION #define FULL_ANIMATION 0 #endif diff --git a/src/blitter/32bpp_sse4.hpp b/src/blitter/32bpp_sse4.hpp index 7d44926b88..deb4fbed92 100644 --- a/src/blitter/32bpp_sse4.hpp +++ b/src/blitter/32bpp_sse4.hpp @@ -16,6 +16,10 @@ #define SSE_VERSION 4 #endif +#ifndef SSE_TARGET +#define SSE_TARGET "sse4.1" +#endif + #ifndef FULL_ANIMATION #define FULL_ANIMATION 0 #endif diff --git a/src/blitter/32bpp_sse_func.hpp b/src/blitter/32bpp_sse_func.hpp index d6e12af619..e8d9c05061 100644 --- a/src/blitter/32bpp_sse_func.hpp +++ b/src/blitter/32bpp_sse_func.hpp @@ -12,6 +12,7 @@ #ifdef WITH_SSE +GNU_TARGET(SSE_TARGET) static inline void InsertFirstUint32(const uint32 value, __m128i &into) { #if (SSE_VERSION >= 4) @@ -22,6 +23,7 @@ static inline void InsertFirstUint32(const uint32 value, __m128i &into) #endif } +GNU_TARGET(SSE_TARGET) static inline void InsertSecondUint32(const uint32 value, __m128i &into) { #if (SSE_VERSION >= 4) @@ -32,6 +34,7 @@ static inline void InsertSecondUint32(const uint32 value, __m128i &into) #endif } +GNU_TARGET(SSE_TARGET) static inline void LoadUint64(const uint64 value, __m128i &into) { #ifdef POINTER_IS_64BIT @@ -46,6 +49,7 @@ static inline void LoadUint64(const uint64 value, __m128i &into) #endif } +GNU_TARGET(SSE_TARGET) static inline __m128i PackUnsaturated(__m128i from, const __m128i &mask) { #if (SSE_VERSION == 2) @@ -56,36 +60,43 @@ static inline __m128i PackUnsaturated(__m128i from, const __m128i &mask) #endif } +GNU_TARGET(SSE_TARGET) static inline __m128i DistributeAlpha(const __m128i from, const __m128i &mask) { #if (SSE_VERSION == 2) __m128i alphaAB = _mm_shufflelo_epi16(from, 0x3F); // PSHUFLW, put alpha1 in front of each rgb1 - return _mm_shufflehi_epi16(alphaAB, 0x3F); // PSHUFHW, put alpha2 in front of each rgb2 + alphaAB = _mm_shufflehi_epi16(alphaAB, 0x3F); // PSHUFHW, put alpha2 in front of each rgb2 + return _mm_andnot_si128(mask, alphaAB); // PANDN, set alpha fields to 0 #else return _mm_shuffle_epi8(from, mask); #endif } -static inline __m128i AlphaBlendTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &pack_mask) +GNU_TARGET(SSE_TARGET) +static inline __m128i AlphaBlendTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &pack_mask, const __m128i &alpha_mask) { __m128i srcAB = _mm_unpacklo_epi8(src, _mm_setzero_si128()); // PUNPCKLBW, expand each uint8 into uint16 __m128i dstAB = _mm_unpacklo_epi8(dst, _mm_setzero_si128()); - __m128i alphaAB = _mm_cmpgt_epi16(srcAB, _mm_setzero_si128()); // PCMPGTW, if (alpha > 0) a++; - alphaAB = _mm_srli_epi16(alphaAB, 15); - alphaAB = _mm_add_epi16(alphaAB, srcAB); + __m128i alphaMaskAB = _mm_cmpgt_epi16(srcAB, _mm_setzero_si128()); // PCMPGTW (alpha > 0) ? 0xFFFF : 0 + __m128i alphaAB = _mm_sub_epi16(srcAB, alphaMaskAB); // if (alpha > 0) a++; alphaAB = DistributeAlpha(alphaAB, distribution_mask); srcAB = _mm_sub_epi16(srcAB, dstAB); // PSUBW, (r - Cr) srcAB = _mm_mullo_epi16(srcAB, alphaAB); // PMULLW, a*(r - Cr) srcAB = _mm_srli_epi16(srcAB, 8); // PSRLW, a*(r - Cr)/256 srcAB = _mm_add_epi16(srcAB, dstAB); // PADDW, a*(r - Cr)/256 + Cr + + alphaMaskAB = _mm_and_si128(alphaMaskAB, alpha_mask); // PAND, set non alpha fields to 0 + srcAB = _mm_or_si128(srcAB, alphaMaskAB); // POR, set alpha fields to 0xFFFF is src alpha was > 0 + return PackUnsaturated(srcAB, pack_mask); } /* Darken 2 pixels. * rgb = rgb * ((256/4) * 4 - (alpha/4)) / ((256/4) * 4) */ +GNU_TARGET(SSE_TARGET) static inline __m128i DarkenTwoPixels(__m128i src, __m128i dst, const __m128i &distribution_mask, const __m128i &tr_nom_base) { __m128i srcAB = _mm_unpacklo_epi8(src, _mm_setzero_si128()); @@ -99,6 +110,7 @@ static inline __m128i DarkenTwoPixels(__m128i src, __m128i dst, const __m128i &d } IGNORE_UNINITIALIZED_WARNING_START +GNU_TARGET(SSE_TARGET) static Colour ReallyAdjustBrightness(Colour colour, uint8 brightness) { uint64 c16 = colour.b | (uint64) colour.g << 16 | (uint64) colour.r << 32; @@ -141,6 +153,7 @@ static inline Colour AdjustBrightneSSE(Colour colour, uint8 brightness) return ReallyAdjustBrightness(colour, brightness); } +GNU_TARGET(SSE_TARGET) static inline __m128i AdjustBrightnessOfTwoPixels(__m128i from, uint32 brightness) { #if (SSE_VERSION < 3) @@ -192,6 +205,7 @@ static inline __m128i AdjustBrightnessOfTwoPixels(__m128i from, uint32 brightnes */ IGNORE_UNINITIALIZED_WARNING_START template +GNU_TARGET(SSE_TARGET) #if (SSE_VERSION == 2) inline void Blitter_32bppSSE2::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom) #elif (SSE_VERSION == 3) @@ -217,9 +231,11 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel const MapValue *src_mv = src_mv_line; /* Load these variables into register before loop. */ + const __m128i alpha_and = ALPHA_AND_MASK; + #define ALPHA_BLEND_PARAM_3 alpha_and #if (SSE_VERSION == 2) const __m128i clear_hi = CLEAR_HIGH_BYTE_MASK; - #define ALPHA_BLEND_PARAM_1 clear_hi + #define ALPHA_BLEND_PARAM_1 alpha_and #define ALPHA_BLEND_PARAM_2 clear_hi #define DARKEN_PARAM_1 tr_nom_base #define DARKEN_PARAM_2 tr_nom_base @@ -265,7 +281,7 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel for (uint x = (uint) effective_width / 2; x > 0; x--) { __m128i srcABCD = _mm_loadl_epi64((const __m128i*) src); __m128i dstABCD = _mm_loadl_epi64((__m128i*) dst); - _mm_storel_epi64((__m128i*) dst, AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2)); + _mm_storel_epi64((__m128i*) dst, AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2, ALPHA_BLEND_PARAM_3)); src += 2; dst += 2; } @@ -273,7 +289,7 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel if ((bt_last == BT_NONE && effective_width & 1) || bt_last == BT_ODD) { __m128i srcABCD = _mm_cvtsi32_si128(src->data); __m128i dstABCD = _mm_cvtsi32_si128(dst->data); - dst->data = _mm_cvtsi128_si32(AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2)); + dst->data = _mm_cvtsi128_si32(AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2, ALPHA_BLEND_PARAM_3)); } break; @@ -318,7 +334,7 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel } /* Blend colours. */ - _mm_storel_epi64((__m128i *) dst, AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2)); + _mm_storel_epi64((__m128i *) dst, AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2, ALPHA_BLEND_PARAM_3)); dst += 2; src += 2; src_mv += 2; @@ -347,7 +363,7 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel if (src->a < 255) { bmcr_alpha_blend_single: __m128i dstABCD = _mm_cvtsi32_si128(dst->data); - srcABCD = AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2); + srcABCD = AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2, ALPHA_BLEND_PARAM_3); } dst->data = _mm_cvtsi128_si32(srcABCD); } diff --git a/src/blitter/32bpp_sse_type.h b/src/blitter/32bpp_sse_type.h index 33c76d9b4d..fe91b294be 100644 --- a/src/blitter/32bpp_sse_type.h +++ b/src/blitter/32bpp_sse_type.h @@ -51,6 +51,7 @@ typedef union ALIGN(16) um128i { #define OVERBRIGHT_VALUE_MASK _mm_setr_epi8(-1, 0, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0) #define OVERBRIGHT_CONTROL_MASK _mm_setr_epi8( 0, 1, 0, 1, 0, 1, 7, 7, 2, 3, 2, 3, 2, 3, 7, 7) #define TRANSPARENT_NOM_BASE _mm_setr_epi16(256, 256, 256, 256, 256, 256, 256, 256) +#define ALPHA_AND_MASK _mm_setr_epi16( 0, 0, 0, -1, 0, 0, 0, -1) #endif /* WITH_SSE */ #endif /* BLITTER_32BPP_SSE_TYPE_H */ diff --git a/src/blitter/32bpp_ssse3.hpp b/src/blitter/32bpp_ssse3.hpp index cc710ed05b..c95095d4df 100644 --- a/src/blitter/32bpp_ssse3.hpp +++ b/src/blitter/32bpp_ssse3.hpp @@ -16,6 +16,10 @@ #define SSE_VERSION 3 #endif +#ifndef SSE_TARGET +#define SSE_TARGET "ssse3" +#endif + #ifndef FULL_ANIMATION #define FULL_ANIMATION 0 #endif diff --git a/src/blitter/CMakeLists.txt b/src/blitter/CMakeLists.txt index ddcc9a0082..50faefbc1c 100644 --- a/src/blitter/CMakeLists.txt +++ b/src/blitter/CMakeLists.txt @@ -38,21 +38,6 @@ add_files( CONDITION NOT OPTION_DEDICATED AND OPENGL_FOUND ) - -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") - set_compile_flags( - 32bpp_anim_sse2.cpp - 32bpp_sse2.cpp - COMPILE_FLAGS -msse2) - set_compile_flags( - 32bpp_ssse3.cpp - COMPILE_FLAGS -mssse3) - set_compile_flags( - 32bpp_anim_sse4.cpp - 32bpp_sse4.cpp - COMPILE_FLAGS -msse4.1) -endif() - add_files( base.hpp common.hpp diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index d8e4aedec9..ddfda8f50b 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -286,16 +286,16 @@ bool HandleBootstrap() /* No user interface, bail out with an error. */ if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) goto failure; - /* If there is no network or no freetype, then there is nothing we can do. Go straight to failure. */ + /* If there is no network or no non-sprite font, then there is nothing we can do. Go straight to failure. */ #if (defined(_WIN32) && defined(WITH_UNISCRIBE)) || (defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(__APPLE__))) || defined(WITH_COCOA) if (!_network_available) goto failure; /* First tell the game we're bootstrapping. */ _game_mode = GM_BOOTSTRAP; - /* Initialise the freetype font code. */ + /* Initialise the font cache. */ InitializeUnicodeGlyphMap(); - /* Next "force" finding a suitable freetype font as the local font is missing. */ + /* Next "force" finding a suitable non-sprite font as the local font is missing. */ CheckForMissingGlyphs(false); /* Initialise the palette. The biggest step is 'faking' some recolour sprites. diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 74c7234d57..515a9318c3 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -20,9 +20,9 @@ #include "sortlist_type.h" #include "widgets/dropdown_func.h" #include "core/geometry_func.hpp" -#include "cmd_helper.h" #include "tunnelbridge_map.h" #include "road_gui.h" +#include "tunnelbridge_cmd.h" #include "widgets/bridge_widget.h" @@ -50,27 +50,22 @@ typedef GUIList GUIBridgeList; ///< List of bridges, used in #B * Callback executed after a build Bridge CMD has been called * * @param result Whether the build succeeded - * @param end_tile End tile of the bridge. - * @param p1 packed start tile coords (~ dx) - * @param p2 various bitstuffed elements - * - p2 = (bit 0- 7) - bridge type (hi bh) - * - p2 = (bit 8-13) - rail type or road types. - * - p2 = (bit 15-16) - transport type. * @param cmd unused + * @param end_tile End tile of the bridge. + * @param tile_start start tile + * @param transport_type transport type. */ -void CcBuildBridge(const CommandCost &result, TileIndex end_tile, uint32 p1, uint32 p2, uint32 cmd) +void CcBuildBridge(Commands cmd, const CommandCost &result, TileIndex end_tile, TileIndex tile_start, TransportType transport_type, BridgeType, byte) { if (result.Failed()) return; if (_settings_client.sound.confirm) SndPlayTileFx(SND_27_CONSTRUCTION_BRIDGE, end_tile); - TransportType transport_type = Extract(p2); - if (transport_type == TRANSPORT_ROAD) { DiagDirection end_direction = ReverseDiagDir(GetTunnelBridgeDirection(end_tile)); ConnectRoadToStructure(end_tile, end_direction); - DiagDirection start_direction = ReverseDiagDir(GetTunnelBridgeDirection(p1)); - ConnectRoadToStructure(p1, start_direction); + DiagDirection start_direction = ReverseDiagDir(GetTunnelBridgeDirection(tile_start)); + ConnectRoadToStructure(tile_start, start_direction); } } @@ -87,7 +82,8 @@ private: /* Internal variables */ TileIndex start_tile; TileIndex end_tile; - uint32 type; + TransportType transport_type; + byte road_rail_type; GUIBridgeList *bridges; int bridgetext_offset; ///< Horizontal offset of the text describing the bridge properties in #WID_BBS_BRIDGE_LIST relative to the left edge. Scrollbar *vscroll; @@ -112,13 +108,13 @@ private: void BuildBridge(uint8 i) { - switch ((TransportType)(this->type >> 15)) { + switch (this->transport_type) { case TRANSPORT_RAIL: _last_railbridge_type = this->bridges->at(i).index; break; case TRANSPORT_ROAD: _last_roadbridge_type = this->bridges->at(i).index; break; default: break; } - DoCommandP(this->end_tile, this->start_tile, this->type | this->bridges->at(i).index, - CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE), CcBuildBridge); + Command::Post(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE, CcBuildBridge, + this->end_tile, this->start_tile, this->transport_type, this->bridges->at(i).index, this->road_rail_type); } /** Sort the builable bridges */ @@ -135,19 +131,20 @@ private: } public: - BuildBridgeWindow(WindowDesc *desc, TileIndex start, TileIndex end, uint32 br_type, GUIBridgeList *bl) : Window(desc), + BuildBridgeWindow(WindowDesc *desc, TileIndex start, TileIndex end, TransportType transport_type, byte road_rail_type, GUIBridgeList *bl) : Window(desc), start_tile(start), end_tile(end), - type(br_type), + transport_type(transport_type), + road_rail_type(road_rail_type), bridges(bl) { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_BBS_SCROLLBAR); /* Change the data, or the caption of the gui. Set it to road or rail, accordingly. */ - this->GetWidget(WID_BBS_CAPTION)->widget_data = (GB(this->type, 15, 2) == TRANSPORT_ROAD) ? STR_SELECT_ROAD_BRIDGE_CAPTION : STR_SELECT_RAIL_BRIDGE_CAPTION; - this->FinishInitNested(GB(br_type, 15, 2)); // Initializes 'this->bridgetext_offset'. + this->GetWidget(WID_BBS_CAPTION)->widget_data = (transport_type == TRANSPORT_ROAD) ? STR_SELECT_ROAD_BRIDGE_CAPTION : STR_SELECT_RAIL_BRIDGE_CAPTION; + this->FinishInitNested(transport_type); // Initializes 'this->bridgetext_offset'. - this->parent = FindWindowById(WC_BUILD_TOOLBAR, GB(this->type, 15, 2)); + this->parent = FindWindowById(WC_BUILD_TOOLBAR, transport_type); this->bridges->SetListing(this->last_sorting); this->bridges->SetSortFuncs(this->sorter_funcs); this->bridges->NeedResort(); @@ -362,12 +359,6 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo { CloseWindowByClass(WC_BUILD_BRIDGE); - /* Data type for the bridge. - * Bit 16,15 = transport type, - * 14..8 = road/rail types, - * 7..0 = type of bridge */ - uint32 type = (transport_type << 15) | (road_rail_type << 8); - /* The bridge length without ramps. */ const uint bridge_len = GetTunnelBridgeLength(start, end); @@ -383,14 +374,14 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo default: break; // water ways and air routes don't have bridge types } if (_ctrl_pressed && CheckBridgeAvailability(last_bridge_type, bridge_len).Succeeded()) { - DoCommandP(end, start, type | last_bridge_type, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE), CcBuildBridge); + Command::Post(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE, CcBuildBridge, end, start, transport_type, last_bridge_type, road_rail_type); return; } /* only query bridge building possibility once, result is the same for all bridges! * returns CMD_ERROR on failure, and price on success */ StringID errmsg = INVALID_STRING_ID; - CommandCost ret = DoCommand(end, start, type, CommandFlagsToDCFlags(GetCommandFlags(CMD_BUILD_BRIDGE)) | DC_QUERY_COST, CMD_BUILD_BRIDGE); + CommandCost ret = Command::Do(CommandFlagsToDCFlags(GetCommandFlags()) | DC_QUERY_COST, end, start, transport_type, 0, road_rail_type); GUIBridgeList *bl = nullptr; if (ret.Failed()) { @@ -450,7 +441,7 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo } if (bl != nullptr && bl->size() != 0) { - new BuildBridgeWindow(&_build_bridge_desc, start, end, type, bl); + new BuildBridgeWindow(&_build_bridge_desc, start, end, transport_type, road_rail_type, bl); } else { delete bl; ShowErrorMessage(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE, errmsg, WL_INFO, TileX(end) * TILE_SIZE, TileY(end) * TILE_SIZE); diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 547ac3e003..04392c9b03 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -30,6 +30,9 @@ #include "cargotype.h" #include "core/geometry_func.hpp" #include "autoreplace_func.h" +#include "engine_cmd.h" +#include "train_cmd.h" +#include "vehicle_cmd.h" #include "widgets/build_vehicle_widget.h" @@ -1079,7 +1082,7 @@ struct BuildVehicleWindow : Window { { this->vehicle_type = type; this->listview_mode = tile == INVALID_TILE; - this->window_number = this->listview_mode ? (int)type : tile; + this->window_number = this->listview_mode ? (int)type : (int)tile; this->sel_engine = INVALID_ENGINE; @@ -1114,7 +1117,7 @@ struct BuildVehicleWindow : Window { this->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9); - this->FinishInitNested(tile == INVALID_TILE ? (int)type : tile); + this->FinishInitNested(tile == INVALID_TILE ? (int)type : (int)tile); this->owner = (tile != INVALID_TILE) ? GetTileOwner(tile) : _local_company; @@ -1226,11 +1229,11 @@ struct BuildVehicleWindow : Window { if (!this->listview_mode) { /* Query for cost and refitted capacity */ - CommandCost ret = DoCommand(this->window_number, this->sel_engine | (cargo << 24), 0, DC_QUERY_COST, GetCmdBuildVeh(this->vehicle_type)); + auto [ret, veh_id, refit_capacity, refit_mail] = Command::Do(DC_QUERY_COST, this->window_number, this->sel_engine, true, cargo, INVALID_CLIENT_ID); if (ret.Succeeded()) { this->te.cost = ret.GetCost() - e->GetCost(); - this->te.capacity = _returned_refit_capacity; - this->te.mail_capacity = _returned_mail_refit_capacity; + this->te.capacity = refit_capacity; + this->te.mail_capacity = refit_mail; this->te.cargo = (cargo == CT_INVALID) ? e->GetDefaultCargoType() : cargo; return; } @@ -1458,7 +1461,7 @@ struct BuildVehicleWindow : Window { case WID_BV_SHOW_HIDE: { const Engine *e = (this->sel_engine == INVALID_ENGINE) ? nullptr : Engine::Get(this->sel_engine); if (e != nullptr) { - DoCommandP(0, 0, this->sel_engine | (e->IsHidden(_current_company) ? 0 : (1u << 31)), CMD_SET_VEHICLE_VISIBILITY); + Command::Post(this->sel_engine, !e->IsHidden(_current_company)); } break; } @@ -1466,10 +1469,13 @@ struct BuildVehicleWindow : Window { case WID_BV_BUILD: { EngineID sel_eng = this->sel_engine; if (sel_eng != INVALID_ENGINE) { - CommandCallback *callback = (this->vehicle_type == VEH_TRAIN && RailVehInfo(sel_eng)->railveh_type == RAILVEH_WAGON) ? CcBuildWagon : CcBuildPrimaryVehicle; CargoID cargo = this->cargo_filter[this->cargo_filter_criteria]; if (cargo == CF_ANY || cargo == CF_ENGINES) cargo = CF_NONE; - DoCommandP(this->window_number, sel_eng | (cargo << 24), 0, GetCmdBuildVeh(this->vehicle_type), callback); + if (this->vehicle_type == VEH_TRAIN && RailVehInfo(sel_eng)->railveh_type == RAILVEH_WAGON) { + Command::Post(GetCmdBuildVehMsg(this->vehicle_type), CcBuildWagon, this->window_number, sel_eng, true, cargo, INVALID_CLIENT_ID); + } else { + Command::Post(GetCmdBuildVehMsg(this->vehicle_type), CcBuildPrimaryVehicle, this->window_number, sel_eng, true, cargo, INVALID_CLIENT_ID); + } } break; } @@ -1634,7 +1640,7 @@ struct BuildVehicleWindow : Window { { if (str == nullptr) return; - DoCommandP(0, this->rename_engine, 0, CMD_RENAME_ENGINE | CMD_MSG(STR_ERROR_CAN_T_RENAME_TRAIN_TYPE + this->vehicle_type), nullptr, str); + Command::Post(STR_ERROR_CAN_T_RENAME_TRAIN_TYPE + this->vehicle_type, this->rename_engine, str); } void OnDropdownSelect(int widget, int index) override @@ -1681,7 +1687,7 @@ void ShowBuildVehicleWindow(TileIndex tile, VehicleType type) * so if tile == INVALID_TILE (Available XXX Window), use 'type' as unique number. * As it always is a low value, it won't collide with any real tile * number. */ - uint num = (tile == INVALID_TILE) ? (int)type : tile; + uint num = (tile == INVALID_TILE) ? (int)type : (int)tile; assert(IsCompanyBuildableVehicleType(type)); diff --git a/src/cargomonitor.cpp b/src/cargomonitor.cpp index 2941a29556..7614cba6ec 100644 --- a/src/cargomonitor.cpp +++ b/src/cargomonitor.cpp @@ -149,9 +149,9 @@ void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, Sour if (iter != _cargo_deliveries.end()) iter->second += amount; /* Industry delivery. */ - for (Industry *ind : st->industries_near) { - if (ind->index != dest) continue; - CargoMonitorID num = EncodeCargoIndustryMonitor(company, cargo_type, ind->index); + for (const auto &i : st->industries_near) { + if (i.industry->index != dest) continue; + CargoMonitorID num = EncodeCargoIndustryMonitor(company, cargo_type, i.industry->index); CargoMonitorMap::iterator iter = _cargo_deliveries.find(num); if (iter != _cargo_deliveries.end()) iter->second += amount; } diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp index 86bba0261b..e9c6e1aa77 100644 --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -75,7 +75,7 @@ CargoPacket::CargoPacket(uint16 count, byte days_in_transit, StationID source, T source_id(source_id), source(source), source_xy(source_xy), - loaded_at_xy(loaded_at_xy) + loaded_at_xy(loaded_at_xy.value) { assert(count != 0); this->source_type = source_type; diff --git a/src/cargotype.h b/src/cargotype.h index 5ed9ac90e2..54d24f1d7a 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -23,7 +23,7 @@ typedef uint32 CargoLabel; /** Town growth effect when delivering cargo. */ -enum TownEffect { +enum TownEffect : byte { TE_BEGIN = 0, TE_NONE = TE_BEGIN, ///< Cargo has no effect. TE_PASSENGERS, ///< Cargo behaves passenger-like. @@ -66,7 +66,6 @@ struct CargoSpec { bool is_freight; ///< Cargo type is considered to be freight (affects train freight multiplier). TownEffect town_effect; ///< The effect that delivering this cargo type has on towns. Also affects destination of subsidies. - uint16 multipliertowngrowth; ///< Size of the effect. uint8 callback_mask; ///< Bitmask of cargo callbacks that have to be called StringID name; ///< Name of this type of cargo. diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp index a0ac5fab8f..eb62dc0317 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -28,6 +28,7 @@ #include "tile_map.h" #include "newgrf.h" #include "error.h" +#include "misc_cmd.h" #include "widgets/cheat_widget.h" @@ -54,7 +55,7 @@ static int32 _money_cheat_amount = 10000000; */ static int32 ClickMoneyCheat(int32 p1, int32 p2) { - DoCommandP(0, (uint32)(p2 * _money_cheat_amount), 0, CMD_MONEY_CHEAT); + Command::Post(p2 * _money_cheat_amount); return _money_cheat_amount; } diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index 4036313123..17711a6267 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -16,6 +16,7 @@ #include "water.h" #include "core/random_func.hpp" #include "newgrf_generic.h" +#include "landscape_cmd.h" #include "table/strings.h" #include "table/sprites.h" @@ -381,7 +382,7 @@ static void ChangeTileOwner_Clear(TileIndex tile, Owner old_owner, Owner new_own static CommandCost TerraformTile_Clear(TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new) { - return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); + return Command::Do(flags, tile); } extern const TileTypeProcs _tile_type_clear_procs = { diff --git a/src/cmd_helper.h b/src/cmd_helper.h deleted file mode 100644 index ceb4d4bd9b..0000000000 --- a/src/cmd_helper.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file cmd_helper.h Helper functions to extract data from command parameters. */ - -#ifndef CMD_HELPER_H -#define CMD_HELPER_H - -#include "core/enum_type.hpp" -#include "core/bitmath_func.hpp" - -/** - * Extracts a given type from a value. - * @tparam T The type of data we're looking for. - * @tparam S The offset in the data. - * @tparam N The amount of bits to read. - * @tparam U The type of data passed to us. - * @param v The data to extract the value from. - */ -template static inline T Extract(U v) -{ - /* Check if there are enough bits in v */ - static_assert(N == EnumPropsT::num_bits); - static_assert(S + N <= sizeof(U) * 8); - static_assert(EnumPropsT::end <= (1 << N)); - U masked = GB(v, S, N); - return IsInsideMM(masked, EnumPropsT::begin, EnumPropsT::end) ? (T)masked : EnumPropsT::invalid; -} - -#endif /* CMD_HELPER_H */ diff --git a/src/command.cpp b/src/command.cpp index 7d1a72dec9..65e5acf10c 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -24,187 +24,69 @@ #include "signal_func.h" #include "core/backup_type.hpp" #include "object_base.h" +#include "autoreplace_cmd.h" +#include "company_cmd.h" +#include "depot_cmd.h" +#include "economy_cmd.h" +#include "engine_cmd.h" +#include "goal_cmd.h" +#include "group_cmd.h" +#include "industry_cmd.h" +#include "landscape_cmd.h" +#include "misc_cmd.h" +#include "news_cmd.h" +#include "object_cmd.h" +#include "order_cmd.h" +#include "rail_cmd.h" +#include "road_cmd.h" +#include "roadveh_cmd.h" +#include "settings_cmd.h" +#include "signs_cmd.h" +#include "station_cmd.h" +#include "story_cmd.h" +#include "subsidy_cmd.h" +#include "terraform_cmd.h" +#include "timetable_cmd.h" +#include "town_cmd.h" +#include "train_cmd.h" +#include "tree_cmd.h" +#include "tunnelbridge_cmd.h" +#include "vehicle_cmd.h" +#include "viewport_cmd.h" +#include "water_cmd.h" +#include "waypoint_cmd.h" +#include "misc/endian_buffer.hpp" +#include "string_func.h" + +#include #include "table/strings.h" #include "safeguards.h" -CommandProc CmdBuildRailroadTrack; -CommandProc CmdRemoveRailroadTrack; -CommandProc CmdBuildSingleRail; -CommandProc CmdRemoveSingleRail; -CommandProc CmdLandscapeClear; +int RecursiveCommandCounter::_counter = 0; -CommandProc CmdBuildBridge; -CommandProc CmdBuildRailStation; -CommandProc CmdRemoveFromRailStation; -CommandProc CmdConvertRail; +/** + * Define a command with the flags which belongs to it. + * + * This struct connects a command handler function with the flags created with + * the #CMD_AUTO, #CMD_OFFLINE and #CMD_SERVER values. + */ +struct CommandInfo { + const char *name; ///< A human readable name for the procedure + CommandFlags flags; ///< The (command) flags to that apply to this command + CommandType type; ///< The type of command. +}; +/* Helpers to generate the master command table from the command traits. */ +template +inline constexpr CommandInfo CommandFromTrait() noexcept { return { T::name, T::flags, T::type }; }; -CommandProc CmdBuildSingleSignal; -CommandProc CmdRemoveSingleSignal; - -CommandProc CmdTerraformLand; - -CommandProc CmdBuildObject; -CommandProc CmdSellLandArea; - -CommandProc CmdBuildTunnel; - -CommandProc CmdBuildTrainDepot; -CommandProc CmdBuildRailWaypoint; -CommandProc CmdRenameWaypoint; -CommandProc CmdRemoveFromRailWaypoint; - -CommandProc CmdBuildRoadStop; -CommandProc CmdRemoveRoadStop; - -CommandProc CmdBuildLongRoad; -CommandProc CmdRemoveLongRoad; -CommandProc CmdBuildRoad; - -CommandProc CmdBuildRoadDepot; - -CommandProc CmdConvertRoad; - -CommandProc CmdBuildAirport; - -CommandProc CmdBuildDock; - -CommandProc CmdBuildShipDepot; - -CommandProc CmdBuildBuoy; - -CommandProc CmdPlantTree; - -CommandProc CmdMoveRailVehicle; - -CommandProc CmdBuildVehicle; -CommandProc CmdSellVehicle; -CommandProc CmdRefitVehicle; -CommandProc CmdSendVehicleToDepot; -CommandProc CmdSetVehicleVisibility; - -CommandProc CmdForceTrainProceed; -CommandProc CmdReverseTrainDirection; - -CommandProc CmdClearOrderBackup; -CommandProc CmdModifyOrder; -CommandProc CmdSkipToOrder; -CommandProc CmdDeleteOrder; -CommandProc CmdInsertOrder; -CommandProc CmdChangeServiceInt; - -CommandProc CmdBuildIndustry; -CommandProc CmdIndustryCtrl; - -CommandProc CmdSetCompanyManagerFace; -CommandProc CmdSetCompanyColour; - -CommandProc CmdIncreaseLoan; -CommandProc CmdDecreaseLoan; - -CommandProc CmdWantEnginePreview; -CommandProc CmdEngineCtrl; - -CommandProc CmdRenameVehicle; -CommandProc CmdRenameEngine; - -CommandProc CmdRenameCompany; -CommandProc CmdRenamePresident; - -CommandProc CmdRenameStation; -CommandProc CmdRenameDepot; - -CommandProc CmdPlaceSign; -CommandProc CmdRenameSign; - -CommandProc CmdTurnRoadVeh; - -CommandProc CmdPause; - -CommandProc CmdBuyShareInCompany; -CommandProc CmdSellShareInCompany; -CommandProc CmdBuyCompany; - -CommandProc CmdFoundTown; -CommandProc CmdRenameTown; -CommandProc CmdDoTownAction; -CommandProc CmdTownGrowthRate; -CommandProc CmdTownRating; -CommandProc CmdTownCargoGoal; -CommandProc CmdTownSetText; -CommandProc CmdExpandTown; -CommandProc CmdDeleteTown; - -CommandProc CmdChangeSetting; -CommandProc CmdChangeCompanySetting; - -CommandProc CmdOrderRefit; -CommandProc CmdCloneOrder; - -CommandProc CmdClearArea; - -CommandProc CmdGiveMoney; -CommandProc CmdMoneyCheat; -CommandProc CmdChangeBankBalance; -CommandProc CmdBuildCanal; -CommandProc CmdBuildLock; - -CommandProc CmdCreateSubsidy; -CommandProc CmdCompanyCtrl; -CommandProc CmdCustomNewsItem; -CommandProc CmdCreateGoal; -CommandProc CmdRemoveGoal; -CommandProc CmdSetGoalText; -CommandProc CmdSetGoalProgress; -CommandProc CmdSetGoalCompleted; -CommandProc CmdGoalQuestion; -CommandProc CmdGoalQuestionAnswer; -CommandProc CmdCreateStoryPage; -CommandProc CmdCreateStoryPageElement; -CommandProc CmdUpdateStoryPageElement; -CommandProc CmdSetStoryPageTitle; -CommandProc CmdSetStoryPageDate; -CommandProc CmdShowStoryPage; -CommandProc CmdRemoveStoryPage; -CommandProc CmdRemoveStoryPageElement; -CommandProc CmdScrollViewport; -CommandProc CmdStoryPageButton; - -CommandProc CmdLevelLand; - -CommandProc CmdBuildSignalTrack; -CommandProc CmdRemoveSignalTrack; - -CommandProc CmdSetAutoReplace; - -CommandProc CmdCloneVehicle; -CommandProc CmdStartStopVehicle; -CommandProc CmdMassStartStopVehicle; -CommandProc CmdAutoreplaceVehicle; -CommandProc CmdDepotSellAllVehicles; -CommandProc CmdDepotMassAutoReplace; - -CommandProc CmdCreateGroup; -CommandProc CmdAlterGroup; -CommandProc CmdDeleteGroup; -CommandProc CmdAddVehicleGroup; -CommandProc CmdAddSharedVehicleGroup; -CommandProc CmdRemoveAllVehiclesGroup; -CommandProc CmdSetGroupFlag; -CommandProc CmdSetGroupLivery; - -CommandProc CmdMoveOrder; -CommandProc CmdChangeTimetable; -CommandProc CmdSetVehicleOnTime; -CommandProc CmdAutofillTimetable; -CommandProc CmdSetTimetableStart; - -CommandProc CmdOpenCloseAirport; - -#define DEF_CMD(proc, flags, type) {proc, #proc, (CommandFlags)flags, type} +template +inline constexpr auto MakeCommandsFromTraits(std::integer_sequence) noexcept { + return std::array{{ CommandFromTrait(i)>>()... }}; +} /** * The master command table @@ -213,174 +95,18 @@ CommandProc CmdOpenCloseAirport; * the flags which belongs to it. The indices are the same * as the value from the CMD_* enums. */ -static const Command _command_proc_table[] = { - DEF_CMD(CmdBuildRailroadTrack, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_RAILROAD_TRACK - DEF_CMD(CmdRemoveRailroadTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_RAILROAD_TRACK - DEF_CMD(CmdBuildSingleRail, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SINGLE_RAIL - DEF_CMD(CmdRemoveSingleRail, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_SINGLE_RAIL - DEF_CMD(CmdLandscapeClear, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_LANDSCAPE_CLEAR - DEF_CMD(CmdBuildBridge, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_BRIDGE - DEF_CMD(CmdBuildRailStation, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_RAIL_STATION - DEF_CMD(CmdBuildTrainDepot, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_TRAIN_DEPOT - DEF_CMD(CmdBuildSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SIGNALS - DEF_CMD(CmdRemoveSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_SIGNALS - DEF_CMD(CmdTerraformLand, CMD_ALL_TILES | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_TERRAFORM_LAND - DEF_CMD(CmdBuildObject, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_OBJECT - DEF_CMD(CmdBuildTunnel, CMD_DEITY | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_TUNNEL - DEF_CMD(CmdRemoveFromRailStation, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_STATION - DEF_CMD(CmdConvertRail, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_RAILD - DEF_CMD(CmdBuildRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_RAIL_WAYPOINT - DEF_CMD(CmdRenameWaypoint, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_WAYPOINT - DEF_CMD(CmdRemoveFromRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_WAYPOINT +static constexpr auto _command_proc_table = MakeCommandsFromTraits(std::make_integer_sequence, CMD_END>{}); - DEF_CMD(CmdBuildRoadStop, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD_STOP - DEF_CMD(CmdRemoveRoadStop, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_ROAD_STOP - DEF_CMD(CmdBuildLongRoad,CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_LONG_ROAD - DEF_CMD(CmdRemoveLongRoad, CMD_NO_TEST | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_LONG_ROAD; towns may disallow removing road bits (as they are connected) in test, but in exec they're removed and thus removing is allowed. - DEF_CMD(CmdBuildRoad, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD - DEF_CMD(CmdBuildRoadDepot, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD_DEPOT - DEF_CMD(CmdConvertRoad, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_ROAD - - DEF_CMD(CmdBuildAirport, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_AIRPORT - DEF_CMD(CmdBuildDock, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_DOCK - DEF_CMD(CmdBuildShipDepot, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SHIP_DEPOT - DEF_CMD(CmdBuildBuoy, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_BUOY - DEF_CMD(CmdPlantTree, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_PLANT_TREE - - DEF_CMD(CmdBuildVehicle, CMD_CLIENT_ID, CMDT_VEHICLE_CONSTRUCTION ), // CMD_BUILD_VEHICLE - DEF_CMD(CmdSellVehicle, CMD_CLIENT_ID, CMDT_VEHICLE_CONSTRUCTION ), // CMD_SELL_VEHICLE - DEF_CMD(CmdRefitVehicle, 0, CMDT_VEHICLE_CONSTRUCTION ), // CMD_REFIT_VEHICLE - DEF_CMD(CmdSendVehicleToDepot, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_SEND_VEHICLE_TO_DEPOT - DEF_CMD(CmdSetVehicleVisibility, 0, CMDT_COMPANY_SETTING ), // CMD_SET_VEHICLE_VISIBILITY - - DEF_CMD(CmdMoveRailVehicle, 0, CMDT_VEHICLE_CONSTRUCTION ), // CMD_MOVE_RAIL_VEHICLE - DEF_CMD(CmdForceTrainProceed, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_FORCE_TRAIN_PROCEED - DEF_CMD(CmdReverseTrainDirection, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_REVERSE_TRAIN_DIRECTION - - DEF_CMD(CmdClearOrderBackup, CMD_CLIENT_ID, CMDT_SERVER_SETTING ), // CMD_CLEAR_ORDER_BACKUP - DEF_CMD(CmdModifyOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_MODIFY_ORDER - DEF_CMD(CmdSkipToOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SKIP_TO_ORDER - DEF_CMD(CmdDeleteOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_DELETE_ORDER - DEF_CMD(CmdInsertOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_INSERT_ORDER - - DEF_CMD(CmdChangeServiceInt, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_CHANGE_SERVICE_INT - - DEF_CMD(CmdBuildIndustry, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_INDUSTRY - DEF_CMD(CmdIndustryCtrl, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_INDUSTRY_CTRL - - DEF_CMD(CmdSetCompanyManagerFace, 0, CMDT_OTHER_MANAGEMENT ), // CMD_SET_COMPANY_MANAGER_FACE - DEF_CMD(CmdSetCompanyColour, 0, CMDT_OTHER_MANAGEMENT ), // CMD_SET_COMPANY_COLOUR - - DEF_CMD(CmdIncreaseLoan, 0, CMDT_MONEY_MANAGEMENT ), // CMD_INCREASE_LOAN - DEF_CMD(CmdDecreaseLoan, 0, CMDT_MONEY_MANAGEMENT ), // CMD_DECREASE_LOAN - - DEF_CMD(CmdWantEnginePreview, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_WANT_ENGINE_PREVIEW - DEF_CMD(CmdEngineCtrl, CMD_DEITY, CMDT_VEHICLE_MANAGEMENT ), // CMD_ENGINE_CTRL - - DEF_CMD(CmdRenameVehicle, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_VEHICLE - DEF_CMD(CmdRenameEngine, CMD_SERVER, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_ENGINE - - DEF_CMD(CmdRenameCompany, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_COMPANY - DEF_CMD(CmdRenamePresident, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_PRESIDENT - - DEF_CMD(CmdRenameStation, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_STATION - DEF_CMD(CmdRenameDepot, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_DEPOT - - DEF_CMD(CmdPlaceSign, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_PLACE_SIGN - DEF_CMD(CmdRenameSign, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_SIGN - - DEF_CMD(CmdTurnRoadVeh, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_TURN_ROADVEH - - DEF_CMD(CmdPause, CMD_SERVER | CMD_NO_EST, CMDT_SERVER_SETTING ), // CMD_PAUSE - - DEF_CMD(CmdBuyShareInCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_BUY_SHARE_IN_COMPANY - DEF_CMD(CmdSellShareInCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_SELL_SHARE_IN_COMPANY - DEF_CMD(CmdBuyCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_BUY_COMANY - - DEF_CMD(CmdFoundTown, CMD_DEITY | CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_FOUND_TOWN; founding random town can fail only in exec run - DEF_CMD(CmdRenameTown, CMD_DEITY | CMD_SERVER, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_TOWN - DEF_CMD(CmdDoTownAction, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_DO_TOWN_ACTION - DEF_CMD(CmdTownCargoGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_CARGO_GOAL - DEF_CMD(CmdTownGrowthRate, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_GROWTH_RATE - DEF_CMD(CmdTownRating, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_RATING - DEF_CMD(CmdTownSetText, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_SET_TEXT - DEF_CMD(CmdExpandTown, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_EXPAND_TOWN - DEF_CMD(CmdDeleteTown, CMD_OFFLINE, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_DELETE_TOWN - - DEF_CMD(CmdOrderRefit, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_ORDER_REFIT - DEF_CMD(CmdCloneOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_CLONE_ORDER - - DEF_CMD(CmdClearArea, CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CLEAR_AREA; destroying multi-tile houses makes town rating differ between test and execution - - DEF_CMD(CmdMoneyCheat, CMD_OFFLINE, CMDT_CHEAT ), // CMD_MONEY_CHEAT - DEF_CMD(CmdChangeBankBalance, CMD_DEITY, CMDT_MONEY_MANAGEMENT ), // CMD_CHANGE_BANK_BALANCE - DEF_CMD(CmdBuildCanal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_CANAL - DEF_CMD(CmdCreateSubsidy, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_SUBSIDY - DEF_CMD(CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID | CMD_NO_EST, CMDT_SERVER_SETTING ), // CMD_COMPANY_CTRL - DEF_CMD(CmdCustomNewsItem, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CUSTOM_NEWS_ITEM - DEF_CMD(CmdCreateGoal, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_GOAL - DEF_CMD(CmdRemoveGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_GOAL - DEF_CMD(CmdSetGoalText, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SET_GOAL_TEXT - DEF_CMD(CmdSetGoalProgress, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SET_GOAL_PROGRESS - DEF_CMD(CmdSetGoalCompleted, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SET_GOAL_COMPLETED - DEF_CMD(CmdGoalQuestion, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_GOAL_QUESTION - DEF_CMD(CmdGoalQuestionAnswer, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_GOAL_QUESTION_ANSWER - DEF_CMD(CmdCreateStoryPage, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_STORY_PAGE - DEF_CMD(CmdCreateStoryPageElement, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_STORY_PAGE_ELEMENT - DEF_CMD(CmdUpdateStoryPageElement, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_UPDATE_STORY_PAGE_ELEMENT - DEF_CMD(CmdSetStoryPageTitle, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SET_STORY_PAGE_TITLE - DEF_CMD(CmdSetStoryPageDate, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SET_STORY_PAGE_DATE - DEF_CMD(CmdShowStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SHOW_STORY_PAGE - DEF_CMD(CmdRemoveStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_STORY_PAGE - DEF_CMD(CmdRemoveStoryPageElement, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_STORY_ELEMENT_PAGE - DEF_CMD(CmdScrollViewport, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SCROLL_VIEWPORT - DEF_CMD(CmdStoryPageButton, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_STORY_PAGE_BUTTON - - DEF_CMD(CmdLevelLand, CMD_ALL_TILES | CMD_NO_TEST | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_LEVEL_LAND; test run might clear tiles multiple times, in execution that only happens once - - DEF_CMD(CmdBuildLock, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_LOCK - - DEF_CMD(CmdBuildSignalTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SIGNAL_TRACK - DEF_CMD(CmdRemoveSignalTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_SIGNAL_TRACK - - DEF_CMD(CmdGiveMoney, 0, CMDT_MONEY_MANAGEMENT ), // CMD_GIVE_MONEY - DEF_CMD(CmdChangeSetting, CMD_SERVER, CMDT_SERVER_SETTING ), // CMD_CHANGE_SETTING - DEF_CMD(CmdChangeCompanySetting, 0, CMDT_COMPANY_SETTING ), // CMD_CHANGE_COMPANY_SETTING - DEF_CMD(CmdSetAutoReplace, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_SET_AUTOREPLACE - DEF_CMD(CmdCloneVehicle, CMD_NO_TEST, CMDT_VEHICLE_CONSTRUCTION ), // CMD_CLONE_VEHICLE; NewGRF callbacks influence building and refitting making it impossible to correctly estimate the cost - DEF_CMD(CmdStartStopVehicle, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_START_STOP_VEHICLE - DEF_CMD(CmdMassStartStopVehicle, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_MASS_START_STOP - DEF_CMD(CmdAutoreplaceVehicle, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_AUTOREPLACE_VEHICLE - DEF_CMD(CmdDepotSellAllVehicles, 0, CMDT_VEHICLE_CONSTRUCTION ), // CMD_DEPOT_SELL_ALL_VEHICLES - DEF_CMD(CmdDepotMassAutoReplace, 0, CMDT_VEHICLE_CONSTRUCTION ), // CMD_DEPOT_MASS_AUTOREPLACE - DEF_CMD(CmdCreateGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_CREATE_GROUP - DEF_CMD(CmdDeleteGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_DELETE_GROUP - DEF_CMD(CmdAlterGroup, 0, CMDT_OTHER_MANAGEMENT ), // CMD_ALTER_GROUP - DEF_CMD(CmdAddVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_ADD_VEHICLE_GROUP - DEF_CMD(CmdAddSharedVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_ADD_SHARE_VEHICLE_GROUP - DEF_CMD(CmdRemoveAllVehiclesGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_REMOVE_ALL_VEHICLES_GROUP - DEF_CMD(CmdSetGroupFlag, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_GROUP_FLAG - DEF_CMD(CmdSetGroupLivery, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_GROUP_LIVERY - DEF_CMD(CmdMoveOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_MOVE_ORDER - DEF_CMD(CmdChangeTimetable, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_CHANGE_TIMETABLE - DEF_CMD(CmdSetVehicleOnTime, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_VEHICLE_ON_TIME - DEF_CMD(CmdAutofillTimetable, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_AUTOFILL_TIMETABLE - DEF_CMD(CmdSetTimetableStart, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_TIMETABLE_START - - DEF_CMD(CmdOpenCloseAirport, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_OPEN_CLOSE_AIRPORT -}; /*! - * This function range-checks a cmd, and checks if the cmd is not nullptr + * This function range-checks a cmd. * * @param cmd The integer value of a command * @return true if the command is valid (and got a CommandProc function) */ -bool IsValidCommand(uint32 cmd) +bool IsValidCommand(Commands cmd) { - cmd &= CMD_ID_MASK; - - return cmd < lengthof(_command_proc_table) && _command_proc_table[cmd].proc != nullptr; + return cmd < _command_proc_table.size(); } /*! @@ -390,11 +116,11 @@ bool IsValidCommand(uint32 cmd) * @param cmd The integer value of the command * @return The flags for this command */ -CommandFlags GetCommandFlags(uint32 cmd) +CommandFlags GetCommandFlags(Commands cmd) { assert(IsValidCommand(cmd)); - return _command_proc_table[cmd & CMD_ID_MASK].flags; + return _command_proc_table[cmd].flags; } /*! @@ -404,11 +130,11 @@ CommandFlags GetCommandFlags(uint32 cmd) * @param cmd The integer value of the command * @return The name for this command */ -const char *GetCommandName(uint32 cmd) +const char *GetCommandName(Commands cmd) { assert(IsValidCommand(cmd)); - return _command_proc_table[cmd & CMD_ID_MASK].name; + return _command_proc_table[cmd].name; } /** @@ -416,7 +142,7 @@ const char *GetCommandName(uint32 cmd) * @param cmd The command to check. * @return True if the command is allowed while paused, false otherwise. */ -bool IsCommandAllowedWhilePaused(uint32 cmd) +bool IsCommandAllowedWhilePaused(Commands cmd) { /* Lookup table for the command types that are allowed for a given pause level setting. */ static const int command_type_lookup[] = { @@ -433,89 +159,7 @@ bool IsCommandAllowedWhilePaused(uint32 cmd) static_assert(lengthof(command_type_lookup) == CMDT_END); assert(IsValidCommand(cmd)); - return _game_mode == GM_EDITOR || command_type_lookup[_command_proc_table[cmd & CMD_ID_MASK].type] <= _settings_game.construction.command_pause_level; -} - - -static int _docommand_recursive = 0; - -/** - * Shorthand for calling the long DoCommand with a container. - * - * @param container Container with (almost) all information - * @param flags Flags for the command and how to execute the command - * @see CommandProc - * @return the cost - */ -CommandCost DoCommand(const CommandContainer *container, DoCommandFlag flags) -{ - return DoCommand(container->tile, container->p1, container->p2, flags, container->cmd & CMD_ID_MASK, container->text); -} - -/*! - * This function executes a given command with the parameters from the #CommandProc parameter list. - * Depending on the flags parameter it execute or test a command. - * - * @param tile The tile to apply the command on (for the #CommandProc) - * @param p1 Additional data for the command (for the #CommandProc) - * @param p2 Additional data for the command (for the #CommandProc) - * @param flags Flags for the command and how to execute the command - * @param cmd The command-id to execute (a value of the CMD_* enums) - * @param text The text to pass - * @see CommandProc - * @return the cost - */ -CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags, uint32 cmd, const std::string &text) -{ - CommandCost res; - - /* Do not even think about executing out-of-bounds tile-commands */ - if (tile != 0 && (tile >= MapSize() || (!IsValidTile(tile) && (flags & DC_ALL_TILES) == 0))) return CMD_ERROR; - - /* Chop of any CMD_MSG or other flags; we don't need those here */ - CommandProc *proc = _command_proc_table[cmd & CMD_ID_MASK].proc; - - _docommand_recursive++; - - /* only execute the test call if it's toplevel, or we're not execing. */ - if (_docommand_recursive == 1 || !(flags & DC_EXEC) ) { - if (_docommand_recursive == 1) _cleared_object_areas.clear(); - SetTownRatingTestMode(true); - res = proc(tile, flags & ~DC_EXEC, p1, p2, text); - SetTownRatingTestMode(false); - if (res.Failed()) { - goto error; - } - - if (_docommand_recursive == 1 && - !(flags & DC_QUERY_COST) && - !(flags & DC_BANKRUPT) && - !CheckCompanyHasMoney(res)) { // CheckCompanyHasMoney() modifies 'res' to an error if it fails. - goto error; - } - - if (!(flags & DC_EXEC)) { - _docommand_recursive--; - return res; - } - } - - /* Execute the command here. All cost-relevant functions set the expenses type - * themselves to the cost object at some point */ - if (_docommand_recursive == 1) _cleared_object_areas.clear(); - res = proc(tile, flags, p1, p2, text); - if (res.Failed()) { -error: - _docommand_recursive--; - return res; - } - - /* if toplevel, subtract the money. */ - if (--_docommand_recursive == 0 && !(flags & DC_BANKRUPT)) { - SubtractMoneyFromCompany(res); - } - - return res; + return _game_mode == GM_EDITOR || command_type_lookup[_command_proc_table[cmd].type] <= _settings_game.construction.command_pause_level; } /*! @@ -532,70 +176,93 @@ Money GetAvailableMoneyForCommand() return Company::Get(company)->money; } + /** - * Shortcut for the long DoCommandP when having a container with the data. - * @param container the container with information. - * @param my_cmd indicator if the command is from a company or server (to display error messages for a user) - * @return true if the command succeeded, else false + * Prepare for calling a command proc. + * @param top_level Top level of command execution, i.e. command from a command. + * @param test Test run of command? */ -bool DoCommandP(const CommandContainer *container, bool my_cmd) +void CommandHelperBase::InternalDoBefore(bool top_level, bool test) { - return DoCommandP(container->tile, container->p1, container->p2, container->cmd, container->callback, container->text, my_cmd); + if (top_level) _cleared_object_areas.clear(); + if (test) SetTownRatingTestMode(true); } -/*! - * Toplevel network safe docommand function for the current company. Must not be called recursively. - * The callback is called when the command succeeded or failed. The parameters - * \a tile, \a p1, and \a p2 are from the #CommandProc function. The parameter \a cmd is the command to execute. - * The parameter \a my_cmd is used to indicate if the command is from a company or the server. - * - * @param tile The tile to perform a command on (see #CommandProc) - * @param p1 Additional data for the command (see #CommandProc) - * @param p2 Additional data for the command (see #CommandProc) - * @param cmd The command to execute (a CMD_* value) - * @param callback A callback function to call after the command is finished - * @param text The text to pass - * @param my_cmd indicator if the command is from a company or server (to display error messages for a user) - * @return \c true if the command succeeded, else \c false. +/** + * Process result after calling a command proc. + * @param[in,out] res Command result, may be modified. + * @param flags Command flags. + * @param top_level Top level of command execution, i.e. command from a command. + * @param test Test run of command? */ -bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const std::string &text, bool my_cmd) +void CommandHelperBase::InternalDoAfter(CommandCost &res, DoCommandFlag flags, bool top_level, bool test) +{ + if (test) { + SetTownRatingTestMode(false); + + if (res.Succeeded() && top_level && !(flags & DC_QUERY_COST) && !(flags & DC_BANKRUPT)) { + CheckCompanyHasMoney(res); // CheckCompanyHasMoney() modifies 'res' to an error if it fails. + } + } else { + /* If top-level, subtract the money. */ + if (res.Succeeded() && top_level && !(flags & DC_BANKRUPT)) { + SubtractMoneyFromCompany(res); + } + } +} + +/** + * Decide what to do with the command depending on current game state. + * @param cmd Command to execute. + * @param flags Command flags. + * @param tile Tile of command execution. + * @param err_message Message prefix to show on error. + * @param network_command Does this command come from the network? + * @return error state + do only cost estimation? + send to network only? + */ +std::tuple CommandHelperBase::InternalPostBefore(Commands cmd, CommandFlags flags, TileIndex tile, StringID err_message, bool network_command) { /* Cost estimation is generally only done when the * local user presses shift while doing something. * However, in case of incoming network commands, * map generation or the pause button we do want * to execute. */ - bool estimate_only = _shift_pressed && IsLocalCompany() && - !_generating_world && - !(cmd & CMD_NETWORK_COMMAND) && - !(GetCommandFlags(cmd) & CMD_NO_EST); + bool estimate_only = _shift_pressed && IsLocalCompany() && !_generating_world && !network_command && !(flags & CMD_NO_EST); /* We're only sending the command, so don't do * fancy things for 'success'. */ - bool only_sending = _networking && !(cmd & CMD_NETWORK_COMMAND); + bool only_sending = _networking && !network_command; - /* Where to show the message? */ + if (_pause_mode != PM_UNPAUSED && !IsCommandAllowedWhilePaused(cmd) && !estimate_only) { + ShowErrorMessage(err_message, STR_ERROR_NOT_ALLOWED_WHILE_PAUSED, WL_INFO, TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE); + return { true, estimate_only, only_sending }; + } else { + return { false, estimate_only, only_sending }; + } +} + +/** + * Process result of executing a command, possibly displaying any error to the player. + * @param res Command result. + * @param tile Tile of command execution. + * @param estimate_only Is this just cost estimation? + * @param only_sending Was the command only sent to network? + * @param err_message Message prefix to show on error. + * @param my_cmd Is the command from this client? + */ +void CommandHelperBase::InternalPostResult(const CommandCost &res, TileIndex tile, bool estimate_only, bool only_sending, StringID err_message, bool my_cmd) +{ int x = TileX(tile) * TILE_SIZE; int y = TileY(tile) * TILE_SIZE; - if (_pause_mode != PM_UNPAUSED && !IsCommandAllowedWhilePaused(cmd) && !estimate_only) { - ShowErrorMessage(GB(cmd, 16, 16), STR_ERROR_NOT_ALLOWED_WHILE_PAUSED, WL_INFO, x, y); - return false; - } - - /* Only set p2 when the command does not come from the network. */ - if (!(cmd & CMD_NETWORK_COMMAND) && GetCommandFlags(cmd) & CMD_CLIENT_ID && p2 == 0) p2 = CLIENT_ID_SERVER; - - CommandCost res = DoCommandPInternal(tile, p1, p2, cmd, callback, text, my_cmd, estimate_only); if (res.Failed()) { /* Only show the error when it's for us. */ - StringID error_part1 = GB(cmd, 16, 16); - if (estimate_only || (IsLocalCompany() && error_part1 != 0 && my_cmd)) { - ShowErrorMessage(error_part1, res.GetErrorMessage(), WL_INFO, x, y, res.GetTextRefStackGRF(), res.GetTextRefStackSize(), res.GetTextRefStack()); + if (estimate_only || (IsLocalCompany() && err_message != 0 && my_cmd)) { + ShowErrorMessage(err_message, res.GetErrorMessage(), WL_INFO, x, y, res.GetTextRefStackGRF(), res.GetTextRefStackSize(), res.GetTextRefStack()); } } else if (estimate_only) { ShowEstimatedCostOrIncome(res.GetCost(), x, y); - } else if (!only_sending && res.GetCost() != 0 && tile != 0 && IsLocalCompany() && _game_mode != GM_EDITOR) { + } else if (!only_sending && tile != 0 && IsLocalCompany() && _game_mode != GM_EDITOR) { /* Only show the cost animation when we did actually * execute the command, i.e. we're not sending it to * the server, when it has cost the local company @@ -603,63 +270,23 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac * concept of cost, so don't show it there either. */ ShowCostOrIncomeAnimation(x, y, GetSlopePixelZ(x, y), res.GetCost()); } - - if (!estimate_only && !only_sending && callback != nullptr) { - callback(res, tile, p1, p2, cmd); - } - - return res.Succeeded(); } +/** Helper to make a desync log for a command. */ +void CommandHelperBase::LogCommandExecution(Commands cmd, StringID err_message, TileIndex tile, const CommandDataBuffer &args, bool failed) +{ + Debug(desync, 1, "{}: {:08x}; {:02x}; {:02x}; {:08x}; {:08x}; {:06x}; {} ({})", failed ? "cmdf" : "cmd", _date, _date_fract, (int)_current_company, cmd, err_message, tile, FormatArrayAsHex(args), GetCommandName(cmd)); +} /** - * Helper to deduplicate the code for returning. - * @param cmd the command cost to return. + * Prepare for the test run of a command proc call. + * @param cmd_flags Command flags. + * @param tile Tile of command execution. + * @param[in,out] cur_company Backup of current company at start of command execution. + * @return True if test run can go ahead, false on error. */ -#define return_dcpi(cmd) { _docommand_recursive = 0; return cmd; } - -/*! - * Helper function for the toplevel network safe docommand function for the current company. - * - * @param tile The tile to perform a command on (see #CommandProc) - * @param p1 Additional data for the command (see #CommandProc) - * @param p2 Additional data for the command (see #CommandProc) - * @param cmd The command to execute (a CMD_* value) - * @param callback A callback function to call after the command is finished - * @param text The text to pass - * @param my_cmd indicator if the command is from a company or server (to display error messages for a user) - * @param estimate_only whether to give only the estimate or also execute the command - * @return the command cost of this function. - */ -CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const std::string &text, bool my_cmd, bool estimate_only) +bool CommandHelperBase::InternalExecutePrepTest(CommandFlags cmd_flags, TileIndex tile, Backup &cur_company) { - /* Prevent recursion; it gives a mess over the network */ - assert(_docommand_recursive == 0); - _docommand_recursive = 1; - - /* Reset the state. */ - _additional_cash_required = 0; - - /* Get pointer to command handler */ - byte cmd_id = cmd & CMD_ID_MASK; - assert(cmd_id < lengthof(_command_proc_table)); - - CommandProc *proc = _command_proc_table[cmd_id].proc; - /* Shouldn't happen, but you never know when someone adds - * NULLs to the _command_proc_table. */ - assert(proc != nullptr); - - /* Command flags are used internally */ - CommandFlags cmd_flags = GetCommandFlags(cmd); - /* Flags get send to the DoCommand */ - DoCommandFlag flags = CommandFlagsToDCFlags(cmd_flags); - - /* Make sure p2 is properly set to a ClientID. */ - assert(!(cmd_flags & CMD_CLIENT_ID) || p2 != 0); - - /* Do not even think about executing out-of-bounds tile-commands */ - if (tile != 0 && (tile >= MapSize() || (!IsValidTile(tile) && (cmd_flags & CMD_ALL_TILES) == 0))) return_dcpi(CMD_ERROR); - /* Always execute server and spectator commands as spectator */ bool exec_as_spectator = (cmd_flags & (CMD_SPECTATOR | CMD_SERVER)) != 0; @@ -667,65 +294,72 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, * The server will ditch any server commands a client sends to it, so effectively * this guards the server from executing functions for an invalid company. */ if (_game_mode == GM_NORMAL && !exec_as_spectator && !Company::IsValidID(_current_company) && !(_current_company == OWNER_DEITY && (cmd_flags & CMD_DEITY) != 0)) { - return_dcpi(CMD_ERROR); + return false; } - Backup cur_company(_current_company, FILE_LINE); if (exec_as_spectator) cur_company.Change(COMPANY_SPECTATOR); - bool test_and_exec_can_differ = (cmd_flags & CMD_NO_TEST) != 0; - - /* Test the command. */ + /* Enter test mode. */ _cleared_object_areas.clear(); SetTownRatingTestMode(true); BasePersistentStorageArray::SwitchMode(PSM_ENTER_TESTMODE); - CommandCost res = proc(tile, flags, p1, p2, text); + return true; +} + +/** + * Validate result of test run and prepare for real execution. + * @param cmd_flags Command flags. + * @param[in,out] res Command result of test run, may be modified. + * @param estimate_only Is this just cost estimation? + * @param network_command Does this command come from the network? + * @param[in,out] cur_company Backup of current company at start of command execution. + * @return True if test run can go ahead, false on error. + */ +std::tuple CommandHelperBase::InternalExecuteValidateTestAndPrepExec(CommandCost &res, CommandFlags cmd_flags, bool estimate_only, bool network_command, Backup &cur_company) +{ BasePersistentStorageArray::SwitchMode(PSM_LEAVE_TESTMODE); SetTownRatingTestMode(false); /* Make sure we're not messing things up here. */ - assert(exec_as_spectator ? _current_company == COMPANY_SPECTATOR : cur_company.Verify()); + assert((cmd_flags & (CMD_SPECTATOR | CMD_SERVER)) != 0 ? _current_company == COMPANY_SPECTATOR : cur_company.Verify()); /* If the command fails, we're doing an estimate * or the player does not have enough money * (unless it's a command where the test and * execution phase might return different costs) * we bail out here. */ - if (res.Failed() || estimate_only || - (!test_and_exec_can_differ && !CheckCompanyHasMoney(res))) { - if (!_networking || _generating_world || (cmd & CMD_NETWORK_COMMAND) != 0) { - /* Log the failed command as well. Just to be able to be find - * causes of desyncs due to bad command test implementations. */ - Debug(desync, 1, "cmdf: {:08x}; {:02x}; {:02x}; {:06x}; {:08x}; {:08x}; {:08x}; \"{}\" ({})", _date, _date_fract, (int)_current_company, tile, p1, p2, cmd & ~CMD_NETWORK_COMMAND, text, GetCommandName(cmd)); - } - cur_company.Restore(); - return_dcpi(res); + bool test_and_exec_can_differ = (cmd_flags & CMD_NO_TEST) != 0; + if (res.Failed() || estimate_only || (!test_and_exec_can_differ && !CheckCompanyHasMoney(res))) { + return { true, !_networking || _generating_world || network_command, false }; } - /* - * If we are in network, and the command is not from the network - * send it to the command-queue and abort execution - */ - if (_networking && !_generating_world && !(cmd & CMD_NETWORK_COMMAND)) { - NetworkSendCommand(tile, p1, p2, cmd & ~CMD_FLAGS_MASK, callback, text, _current_company); - cur_company.Restore(); + bool send_net = _networking && !_generating_world && !network_command; - /* Don't return anything special here; no error, no costs. - * This way it's not handled by DoCommand and only the - * actual execution of the command causes messages. Also - * reset the storages as we've not executed the command. */ - return_dcpi(CommandCost()); + if (!send_net) { + /* Prepare for command execution. */ + _cleared_object_areas.clear(); + BasePersistentStorageArray::SwitchMode(PSM_ENTER_COMMAND); } - Debug(desync, 1, "cmd: {:08x}; {:02x}; {:02x}; {:06x}; {:08x}; {:08x}; {:08x}; \"{}\" ({})", _date, _date_fract, (int)_current_company, tile, p1, p2, cmd & ~CMD_NETWORK_COMMAND, text, GetCommandName(cmd)); - /* Actually try and execute the command. If no cost-type is given - * use the construction one */ - _cleared_object_areas.clear(); - BasePersistentStorageArray::SwitchMode(PSM_ENTER_COMMAND); - CommandCost res2 = proc(tile, flags | DC_EXEC, p1, p2, text); + return { false, _debug_desync_level >= 1, send_net }; +} + +/** + * Process the result of a command test run and execution run. + * @param cmd Command that was executed. + * @param cmd_flags Command flags. + * @param res_test Command result of test run. + * @param tes_exec Command result of real run. + * @param extra_cash Additional cash required for successful command execution. + * @param tile Tile of command execution. + * @param[in,out] cur_company Backup of current company at start of command execution. + * @return Final command result. + */ +CommandCost CommandHelperBase::InternalExecuteProcessResult(Commands cmd, CommandFlags cmd_flags, const CommandCost &res_test, const CommandCost &res_exec, Money extra_cash, TileIndex tile, Backup &cur_company) +{ BasePersistentStorageArray::SwitchMode(PSM_LEAVE_COMMAND); - if (cmd_id == CMD_COMPANY_CTRL) { + if (cmd == CMD_COMPANY_CTRL) { cur_company.Trash(); /* We are a new company -> Switch to new local company. * We were closed down -> Switch to spectator @@ -733,7 +367,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, _current_company = _local_company; } else { /* Make sure nothing bad happened, like changing the current company. */ - assert(exec_as_spectator ? _current_company == COMPANY_SPECTATOR : cur_company.Verify()); + assert((cmd_flags & (CMD_SPECTATOR | CMD_SERVER)) != 0 ? _current_company == COMPANY_SPECTATOR : cur_company.Verify()); cur_company.Restore(); } @@ -741,20 +375,21 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, * return of the command. Otherwise we can check whether the * test and execution have yielded the same result, * i.e. cost and error state are the same. */ + bool test_and_exec_can_differ = (cmd_flags & CMD_NO_TEST) != 0; if (!test_and_exec_can_differ) { - assert(res.GetCost() == res2.GetCost() && res.Failed() == res2.Failed()); // sanity check - } else if (res2.Failed()) { - return_dcpi(res2); + assert(res_test.GetCost() == res_exec.GetCost() && res_test.Failed() == res_exec.Failed()); // sanity check + } else if (res_exec.Failed()) { + return res_exec; } /* If we're needing more money and we haven't done * anything yet, ask for the money! */ - if (_additional_cash_required != 0 && res2.GetCost() == 0) { + if (extra_cash != 0 && res_exec.GetCost() == 0) { /* It could happen we removed rail, thus gained money, and deleted something else. * So make sure the signal buffer is empty even in this case */ UpdateSignalsInBuffer(); - SetDParam(0, _additional_cash_required); - return_dcpi(CommandCost(STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY)); + SetDParam(0, extra_cash); + return CommandCost(STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY); } /* update last build coordinate of company. */ @@ -763,14 +398,13 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, if (c != nullptr) c->last_build_coordinate = tile; } - SubtractMoneyFromCompany(res2); + SubtractMoneyFromCompany(res_exec); /* update signals if needed */ UpdateSignalsInBuffer(); - return_dcpi(res2); + return res_exec; } -#undef return_dcpi /** diff --git a/src/command_func.h b/src/command_func.h index 426283bd3a..d78c8229a4 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -11,7 +11,12 @@ #define COMMAND_FUNC_H #include "command_type.h" +#include "network/network_type.h" #include "company_type.h" +#include "company_func.h" +#include "core/backup_type.hpp" +#include "misc/endian_buffer.hpp" +#include "tile_map.h" /** * Define a default return value for a failed command. @@ -32,30 +37,26 @@ static const CommandCost CMD_ERROR = CommandCost(INVALID_STRING_ID); */ #define return_cmd_error(errcode) return CommandCost(errcode); -CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags, uint32 cmd, const std::string &text = {}); -CommandCost DoCommand(const CommandContainer *container, DoCommandFlag flags); +void NetworkSendCommand(Commands cmd, StringID err_message, CommandCallback *callback, CompanyID company, TileIndex location, const CommandDataBuffer &cmd_data); -bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback = nullptr, const std::string &text = {}, bool my_cmd = true); -bool DoCommandP(const CommandContainer *container, bool my_cmd = true); - -CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const std::string &text, bool my_cmd, bool estimate_only); - -void NetworkSendCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const std::string &text, CompanyID company); - -extern Money _additional_cash_required; - -bool IsValidCommand(uint32 cmd); -CommandFlags GetCommandFlags(uint32 cmd); -const char *GetCommandName(uint32 cmd); +bool IsValidCommand(Commands cmd); +CommandFlags GetCommandFlags(Commands cmd); +const char *GetCommandName(Commands cmd); Money GetAvailableMoneyForCommand(); -bool IsCommandAllowedWhilePaused(uint32 cmd); +bool IsCommandAllowedWhilePaused(Commands cmd); + +template +constexpr CommandFlags GetCommandFlags() +{ + return CommandTraits::flags; +} /** * Extracts the DC flags needed for DoCommand from the flags returned by GetCommandFlags * @param cmd_flags Flags from GetCommandFlags * @return flags for DoCommand */ -static inline DoCommandFlag CommandFlagsToDCFlags(CommandFlags cmd_flags) +static constexpr inline DoCommandFlag CommandFlagsToDCFlags(CommandFlags cmd_flags) { DoCommandFlag flags = DC_NONE; if (cmd_flags & CMD_NO_WATER) flags |= DC_NO_WATER; @@ -64,60 +65,433 @@ static inline DoCommandFlag CommandFlagsToDCFlags(CommandFlags cmd_flags) return flags; } -/*** All command callbacks that exist ***/ +/** Helper class to keep track of command nesting level. */ +struct RecursiveCommandCounter { + RecursiveCommandCounter() noexcept { _counter++; } + ~RecursiveCommandCounter() noexcept { _counter--; } -/* ai/ai_instance.cpp */ -CommandCallback CcAI; + /** Are we in the top-level command execution? */ + bool IsTopLevel() const { return _counter == 1; } +private: + static int _counter; +}; -/* airport_gui.cpp */ -CommandCallback CcBuildAirport; +#if defined(__GNUC__) && !defined(__clang__) +/* + * We cast specialized function pointers to a generic one, but don't use the + * converted value to call the function, which is safe, except that GCC + * helpfully thinks it is not. + * + * "Any pointer to function can be converted to a pointer to a different function type. + * Calling the function through a pointer to a different function type is undefined, + * but converting such pointer back to pointer to the original function type yields + * the pointer to the original function." */ +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wcast-function-type" +# define SILENCE_GCC_FUNCTION_POINTER_CAST +#endif -/* bridge_gui.cpp */ -CommandCallback CcBuildBridge; +template struct CommandHelper; -/* dock_gui.cpp */ -CommandCallback CcBuildDocks; -CommandCallback CcPlaySound_CONSTRUCTION_WATER; +class CommandHelperBase { +protected: + static void InternalDoBefore(bool top_level, bool test); + static void InternalDoAfter(CommandCost &res, DoCommandFlag flags, bool top_level, bool test); + static std::tuple InternalPostBefore(Commands cmd, CommandFlags flags, TileIndex tile, StringID err_message, bool network_command); + static void InternalPostResult(const CommandCost &res, TileIndex tile, bool estimate_only, bool only_sending, StringID err_message, bool my_cmd); + static bool InternalExecutePrepTest(CommandFlags cmd_flags, TileIndex tile, Backup &cur_company); + static std::tuple InternalExecuteValidateTestAndPrepExec(CommandCost &res, CommandFlags cmd_flags, bool estimate_only, bool network_command, Backup &cur_company); + static CommandCost InternalExecuteProcessResult(Commands cmd, CommandFlags cmd_flags, const CommandCost &res_test, const CommandCost &res_exec, Money extra_cash, TileIndex tile, Backup &cur_company); + static void LogCommandExecution(Commands cmd, StringID err_message, TileIndex tile, const CommandDataBuffer &args, bool failed); +}; -/* depot_gui.cpp */ -CommandCallback CcCloneVehicle; +/** + * Templated wrapper that exposes the command parameter arguments + * for the various Command::Do/Post calls. + * @tparam Tcmd The command-id to execute. + * @tparam Tret Return type of the command. + * @tparam Targs The command parameter types. + */ +template +struct CommandHelper : protected CommandHelperBase { +private: + /** Extract the \c CommandCost from a command proc result. */ + static inline CommandCost &ExtractCommandCost(Tret &ret) + { + if constexpr (std::is_same_v) { + return ret; + } else { + return std::get<0>(ret); + } + } -/* game/game_instance.cpp */ -CommandCallback CcGame; + /** Make a command proc result from a \c CommandCost. */ + static inline Tret MakeResult(const CommandCost &cost) + { + Tret ret{}; + ExtractCommandCost(ret) = cost; + return ret; + } -/* group_gui.cpp */ -CommandCallback CcCreateGroup; -CommandCallback CcAddVehicleNewGroup; +public: + /** + * This function executes a given command with the parameters from the #CommandProc parameter list. + * Depending on the flags parameter it executes or tests a command. + * + * @note This function is to be called from the StateGameLoop or from within the execution of a Command. + * This function must not be called from the context of a "player" (real person, AI, game script). + * Use ::Post for commands directly triggered by "players". + * + * @param flags Flags for the command and how to execute the command + * @param args Parameters for the command + * @see CommandProc + * @return the cost + */ + static Tret Do(DoCommandFlag flags, Targs... args) + { + if constexpr (std::is_same_v>>) { + /* Do not even think about executing out-of-bounds tile-commands. */ + TileIndex tile = std::get<0>(std::make_tuple(args...)); + if (tile != 0 && (tile >= MapSize() || (!IsValidTile(tile) && (flags & DC_ALL_TILES) == 0))) return MakeResult(CMD_ERROR); + } -/* industry_gui.cpp */ -CommandCallback CcBuildIndustry; + RecursiveCommandCounter counter{}; -/* main_gui.cpp */ -CommandCallback CcPlaySound_EXPLOSION; -CommandCallback CcPlaceSign; -CommandCallback CcTerraform; + /* Only execute the test call if it's toplevel, or we're not execing. */ + if (counter.IsTopLevel() || !(flags & DC_EXEC)) { + InternalDoBefore(counter.IsTopLevel(), true); + Tret res = CommandTraits::proc(flags & ~DC_EXEC, args...); + InternalDoAfter(ExtractCommandCost(res), flags, counter.IsTopLevel(), true); // Can modify res. -/* rail_gui.cpp */ -CommandCallback CcPlaySound_CONSTRUCTION_RAIL; -CommandCallback CcRailDepot; -CommandCallback CcStation; -CommandCallback CcBuildRailTunnel; + if (ExtractCommandCost(res).Failed() || !(flags & DC_EXEC)) return res; + } -/* road_gui.cpp */ -CommandCallback CcPlaySound_CONSTRUCTION_OTHER; -CommandCallback CcBuildRoadTunnel; -CommandCallback CcRoadDepot; -CommandCallback CcRoadStop; + /* Execute the command here. All cost-relevant functions set the expenses type + * themselves to the cost object at some point. */ + InternalDoBefore(counter.IsTopLevel(), false); + Tret res = CommandTraits::proc(flags, args...); + InternalDoAfter(ExtractCommandCost(res), flags, counter.IsTopLevel(), false); -/* train_gui.cpp */ -CommandCallback CcBuildWagon; + return res; + } -/* town_gui.cpp */ -CommandCallback CcFoundTown; -CommandCallback CcFoundRandomTown; + /** + * Shortcut for the long Post when not using a callback. + * @param err_message Message prefix to show on error + * @param args Parameters for the command + */ + static inline bool Post(StringID err_message, Targs... args) { return Post(err_message, nullptr, std::forward(args)...); } + /** + * Shortcut for the long Post when not using an error message. + * @param callback A callback function to call after the command is finished + * @param args Parameters for the command + */ + template + static inline bool Post(Tcallback *callback, Targs... args) { return Post((StringID)0, callback, std::forward(args)...); } + /** + * Shortcut for the long Post when not using a callback or an error message. + * @param args Parameters for the command + */ + static inline bool Post(Targs... args) { return Post((StringID)0, nullptr, std::forward(args)...); } -/* vehicle_gui.cpp */ -CommandCallback CcBuildPrimaryVehicle; -CommandCallback CcStartStopVehicle; + /** + * Top-level network safe command execution for the current company. + * Must not be called recursively. The callback is called when the + * command succeeded or failed. + * + * @param err_message Message prefix to show on error + * @param callback A callback function to call after the command is finished + * @param args Parameters for the command + * @return \c true if the command succeeded, else \c false. + */ + template + static bool Post(StringID err_message, Tcallback *callback, Targs... args) + { + return InternalPost(err_message, callback, true, false, std::forward_as_tuple(args...)); + } + + /** + * Execute a command coming from the network. + * @param err_message Message prefix to show on error + * @param callback A callback function to call after the command is finished + * @param my_cmd indicator if the command is from a company or server (to display error messages for a user) + * @param location Tile location for user feedback. + * @param args Parameters for the command + * @return \c true if the command succeeded, else \c false. + */ + template + static bool PostFromNet(StringID err_message, Tcallback *callback, bool my_cmd, TileIndex location, std::tuple args) + { + if constexpr (std::is_same_v>) { + /* Do not even think about executing out-of-bounds tile-commands. */ + TileIndex tile = std::get<0>(args); + if (tile != 0 && (tile >= MapSize() || (!IsValidTile(tile) && (GetCommandFlags() & CMD_ALL_TILES) == 0))) return false; + } + + return InternalPost(err_message, callback, my_cmd, true, location, std::move(args)); + } + + /** + * Prepare a command to be send over the network + * @param cmd The command to execute (a CMD_* value) + * @param err_message Message prefix to show on error + * @param company The company that wants to send the command + * @param args Parameters for the command + */ + static void SendNet(StringID err_message, CompanyID company, Targs... args) + { + auto args_tuple = std::forward_as_tuple(args...); + + TileIndex tile{}; + if constexpr (std::is_same_v>) { + tile = std::get<0>(args_tuple); + } + + ::NetworkSendCommand(Tcmd, err_message, nullptr, _current_company, tile, EndianBufferWriter::FromValue(args_tuple)); + } + + /** + * Top-level network safe command execution without safety checks. + * @param err_message Message prefix to show on error + * @param callback A callback function to call after the command is finished + * @param my_cmd indicator if the command is from a company or server (to display error messages for a user) + * @param estimate_only whether to give only the estimate or also execute the command + * @param location Tile location for user feedback. + * @param args Parameters for the command + * @return the command cost of this function. + */ + template + static Tret Unsafe(StringID err_message, Tcallback *callback, bool my_cmd, bool estimate_only, TileIndex location, std::tuple args) + { + return Execute(err_message, reinterpret_cast(callback), my_cmd, estimate_only, false, location, std::move(args)); + } + +protected: + /** Helper to process a single ClientID argument. */ + template + static inline void SetClientIdHelper(T &data) + { + if constexpr (std::is_same_v) { + if (data == INVALID_CLIENT_ID) data = CLIENT_ID_SERVER; + } + } + + /** Set all invalid ClientID's to the proper value. */ + template + static inline void SetClientIds(Ttuple &values, std::index_sequence) + { + ((SetClientIdHelper(std::get(values))), ...); + } + + /** Remove the first element of a tuple. */ + template