summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Lutz <michi@icosahedron.de>2021-10-05 22:02:27 +0200
committerMichael Lutz <michi@icosahedron.de>2021-12-16 22:28:32 +0100
commit33ca4f2b9950d98fed902962c847833667ccca9f (patch)
tree503825bff107d7a296c4bf7a0c6e64bd957e0454
parent5ddfdc8516e35c4f5de2613692d104486151171b (diff)
downloadopenttd-33ca4f2b9950d98fed902962c847833667ccca9f.tar.xz
Codechange: Let the compile generate the master command table out of templated command traits.
This is using a non-intrusive type-traits like templated system, which allows compile-time validation that the command table and the command enum match up.
-rw-r--r--src/CMakeLists.txt32
-rw-r--r--src/aircraft_cmd.cpp1
-rw-r--r--src/aircraft_cmd.h19
-rw-r--r--src/autoreplace_cmd.cpp1
-rw-r--r--src/autoreplace_cmd.h21
-rw-r--r--src/command.cpp391
-rw-r--r--src/command_func.h4
-rw-r--r--src/command_type.h23
-rw-r--r--src/company_cmd.cpp1
-rw-r--r--src/company_cmd.h29
-rw-r--r--src/depot_cmd.cpp1
-rw-r--r--src/depot_cmd.h19
-rw-r--r--src/economy.cpp1
-rw-r--r--src/economy_cmd.h23
-rw-r--r--src/engine.cpp1
-rw-r--r--src/engine_cmd.h25
-rw-r--r--src/goal.cpp1
-rw-r--r--src/goal_cmd.h31
-rw-r--r--src/group_cmd.cpp1
-rw-r--r--src/group_cmd.h33
-rw-r--r--src/industry_cmd.cpp1
-rw-r--r--src/industry_cmd.h21
-rw-r--r--src/landscape.cpp1
-rw-r--r--src/landscape_cmd.h21
-rw-r--r--src/misc_cmd.cpp1
-rw-r--r--src/misc_cmd.h27
-rw-r--r--src/news_cmd.h19
-rw-r--r--src/news_gui.cpp1
-rw-r--r--src/object_cmd.cpp1
-rw-r--r--src/object_cmd.h19
-rw-r--r--src/order_backup.cpp1
-rw-r--r--src/order_cmd.cpp1
-rw-r--r--src/order_cmd.h33
-rw-r--r--src/rail_cmd.cpp1
-rw-r--r--src/rail_cmd.h37
-rw-r--r--src/road_cmd.cpp1
-rw-r--r--src/road_cmd.h13
-rw-r--r--src/roadveh_cmd.cpp1
-rw-r--r--src/roadveh_cmd.h23
-rw-r--r--src/settings.cpp1
-rw-r--r--src/settings_cmd.h21
-rw-r--r--src/ship_cmd.cpp1
-rw-r--r--src/ship_cmd.h19
-rw-r--r--src/signs_cmd.cpp1
-rw-r--r--src/signs_cmd.h21
-rw-r--r--src/station_cmd.cpp2
-rw-r--r--src/station_cmd.h33
-rw-r--r--src/story.cpp1
-rw-r--r--src/story_cmd.h35
-rw-r--r--src/subsidy.cpp1
-rw-r--r--src/subsidy_cmd.h19
-rw-r--r--src/table/CMakeLists.txt2
-rw-r--r--src/table/train_sprites.h (renamed from src/table/train_cmd.h)2
-rw-r--r--src/terraform_cmd.cpp1
-rw-r--r--src/terraform_cmd.h21
-rw-r--r--src/timetable_cmd.cpp1
-rw-r--r--src/timetable_cmd.h25
-rw-r--r--src/town_cmd.cpp1
-rw-r--r--src/town_cmd.h35
-rw-r--r--src/train_cmd.cpp3
-rw-r--r--src/train_cmd.h28
-rw-r--r--src/tree_cmd.cpp1
-rw-r--r--src/tree_cmd.h19
-rw-r--r--src/tunnelbridge_cmd.cpp1
-rw-r--r--src/tunnelbridge_cmd.h21
-rw-r--r--src/vehicle_cmd.cpp14
-rw-r--r--src/vehicle_cmd.h39
-rw-r--r--src/viewport.cpp1
-rw-r--r--src/viewport_cmd.h19
-rw-r--r--src/water_cmd.cpp1
-rw-r--r--src/water_cmd.h23
-rw-r--r--src/waypoint_cmd.cpp1
-rw-r--r--src/waypoint_cmd.h25
73 files changed, 961 insertions, 359 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 631eaf6de..6950e3275 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -38,6 +38,7 @@ endif()
add_files(
aircraft.h
aircraft_cmd.cpp
+ aircraft_cmd.h
aircraft_gui.cpp
airport.cpp
airport.h
@@ -49,6 +50,7 @@ add_files(
autoreplace.cpp
autoreplace_base.h
autoreplace_cmd.cpp
+ autoreplace_cmd.h
autoreplace_func.h
autoreplace_gui.cpp
autoreplace_gui.h
@@ -90,6 +92,7 @@ add_files(
command_type.h
company_base.h
company_cmd.cpp
+ company_cmd.h
company_func.h
company_gui.cpp
company_gui.h
@@ -119,6 +122,7 @@ add_files(
depot.cpp
depot_base.h
depot_cmd.cpp
+ depot_cmd.h
depot_func.h
depot_gui.cpp
depot_map.h
@@ -132,6 +136,7 @@ add_files(
driver.h
economy.cpp
economy_base.h
+ economy_cmd.h
economy_func.h
economy_type.h
effectvehicle.cpp
@@ -141,6 +146,7 @@ add_files(
elrail_func.h
engine.cpp
engine_base.h
+ engine_cmd.h
engine_func.h
engine_gui.cpp
engine_gui.h
@@ -174,6 +180,7 @@ add_files(
gfxinit.h
goal.cpp
goal_base.h
+ goal_cmd.h
goal_gui.cpp
goal_type.h
graph_gui.cpp
@@ -182,6 +189,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 +206,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 +217,7 @@ add_files(
intro_gui.cpp
landscape.cpp
landscape.h
+ landscape_cmd.h
landscape_type.h
language.h
livery.h
@@ -217,6 +227,7 @@ add_files(
map_type.h
misc.cpp
misc_cmd.cpp
+ misc_cmd.h
misc_gui.cpp
mixer.cpp
mixer.h
@@ -277,6 +288,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 +296,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 +306,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 +319,7 @@ add_files(
rail.cpp
rail.h
rail_cmd.cpp
+ rail_cmd.h
rail_gui.cpp
rail_gui.h
rail_map.h
@@ -327,6 +342,7 @@ add_files(
roadstop_base.h
roadveh.h
roadveh_cmd.cpp
+ roadveh_cmd.h
roadveh_gui.cpp
safeguards.h
screenshot_gui.cpp
@@ -334,6 +350,7 @@ add_files(
screenshot.cpp
screenshot.h
settings.cpp
+ settings_cmd.h
settings_func.h
settings_gui.cpp
settings_gui.h
@@ -343,6 +360,7 @@ add_files(
settings_type.h
ship.h
ship_cmd.cpp
+ ship_cmd.h
ship_gui.cpp
signal.cpp
signal_func.h
@@ -350,6 +368,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 +387,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 +399,7 @@ add_files(
stdafx.h
story.cpp
story_base.h
+ story_cmd.h
story_gui.cpp
story_type.h
strgen/strgen.h
@@ -393,11 +414,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 +445,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 +463,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 +491,7 @@ add_files(
vehiclelist.cpp
vehiclelist.h
viewport.cpp
+ viewport_cmd.h
viewport_func.h
viewport_gui.cpp
viewport_kdtree.h
@@ -472,10 +502,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/aircraft_cmd.cpp b/src/aircraft_cmd.cpp
index 1f52bbecd..2d9b2ae16 100644
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -37,6 +37,7 @@
#include "disaster_vehicle.h"
#include "newgrf_airporttiles.h"
#include "framerate_type.h"
+#include "aircraft_cmd.h"
#include "table/strings.h"
diff --git a/src/aircraft_cmd.h b/src/aircraft_cmd.h
new file mode 100644
index 000000000..769a707c7
--- /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 <http://www.gnu.org/licenses/>.
+ */
+
+/** @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(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v);
+
+#endif /* AIRCRAFT_CMD_H */
diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp
index 2602d86ad..db14a4a1d 100644
--- a/src/autoreplace_cmd.cpp
+++ b/src/autoreplace_cmd.cpp
@@ -22,6 +22,7 @@
#include "ai/ai.hpp"
#include "news_func.h"
#include "strings_func.h"
+#include "autoreplace_cmd.h"
#include "table/strings.h"
diff --git a/src/autoreplace_cmd.h b/src/autoreplace_cmd.h
new file mode 100644
index 000000000..14088d6dc
--- /dev/null
+++ b/src/autoreplace_cmd.h
@@ -0,0 +1,21 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file autoreplace_cmd.h Command definitions related to autoreplace. */
+
+#ifndef AUTOREPLACE_CMD_H
+#define AUTOREPLACE_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdAutoreplaceVehicle;
+CommandProc CmdSetAutoReplace;
+
+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/command.cpp b/src/command.cpp
index 449fdece2..b875884f9 100644
--- a/src/command.cpp
+++ b/src/command.cpp
@@ -24,187 +24,66 @@
#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 <array>
#include "table/strings.h"
#include "safeguards.h"
-CommandProc CmdBuildRailroadTrack;
-CommandProc CmdRemoveRailroadTrack;
-CommandProc CmdBuildSingleRail;
-CommandProc CmdRemoveSingleRail;
-CommandProc CmdLandscapeClear;
-
-CommandProc CmdBuildBridge;
-
-CommandProc CmdBuildRailStation;
-CommandProc CmdRemoveFromRailStation;
-CommandProc CmdConvertRail;
-
-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;
+/**
+ * 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 {
+ CommandProc *proc; ///< The procedure to actually executing
+ 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. */
-CommandProc CmdGiveMoney;
-CommandProc CmdMoneyCheat;
-CommandProc CmdChangeBankBalance;
-CommandProc CmdBuildCanal;
-CommandProc CmdBuildLock;
+template <typename T>
+inline constexpr CommandInfo CommandFromTrait() noexcept { return { T::proc, T::name, T::flags, T::type }; };
-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<typename T, T... i>
+inline constexpr auto MakeCommandsFromTraits(std::integer_sequence<T, i...>) noexcept {
+ return std::array<CommandInfo, sizeof...(i)>{{ CommandFromTrait<CommandTraits<static_cast<Commands>(i)>>()... }};
+}
/**
* The master command table
@@ -213,162 +92,8 @@ 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
-
- 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
-};
+static constexpr auto _command_proc_table = MakeCommandsFromTraits(std::make_integer_sequence<std::underlying_type_t<Commands>, CMD_END>{});
+
/*!
* This function range-checks a cmd, and checks if the cmd is not nullptr
@@ -376,9 +101,9 @@ static const Command _command_proc_table[] = {
* @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)
{
- return cmd < lengthof(_command_proc_table) && _command_proc_table[cmd].proc != nullptr;
+ return cmd < _command_proc_table.size() && _command_proc_table[cmd].proc != nullptr;
}
/*!
@@ -414,7 +139,7 @@ const char *GetCommandName(Commands 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[] = {
@@ -704,7 +429,7 @@ CommandCost DoCommandPInternal(Commands cmd, StringID err_message, CommandCallba
_additional_cash_required = 0;
/* Get pointer to command handler */
- assert(cmd < lengthof(_command_proc_table));
+ assert(cmd < _command_proc_table.size());
CommandProc *proc = _command_proc_table[cmd].proc;
/* Shouldn't happen, but you never know when someone adds
* NULLs to the _command_proc_table. */
diff --git a/src/command_func.h b/src/command_func.h
index 662ae00a5..15c88ea03 100644
--- a/src/command_func.h
+++ b/src/command_func.h
@@ -47,11 +47,11 @@ void NetworkSendCommand(Commands cmd, StringID err_message, CommandCallback *cal
extern Money _additional_cash_required;
-bool IsValidCommand(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);
/**
* Extracts the DC flags needed for DoCommand from the flags returned by GetCommandFlags
diff --git a/src/command_type.h b/src/command_type.h
index 972db596e..ecb24df12 100644
--- a/src/command_type.h
+++ b/src/command_type.h
@@ -423,18 +423,17 @@ enum CommandPauseLevel {
*/
typedef CommandCost CommandProc(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const std::string &text);
-/**
- * Define a command with the flags which belongs to it.
- *
- * This struct connect a command handler function with the flags created with
- * the #CMD_AUTO, #CMD_OFFLINE and #CMD_SERVER values.
- */
-struct Command {
- CommandProc *proc; ///< The procedure to actually executing
- 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.
-};
+
+/** Defines the traits of a command. */
+template <Commands Tcmd> struct CommandTraits;
+
+#define DEF_CMD_TRAIT(cmd_, proc_, flags_, type_) \
+ template<> struct CommandTraits<cmd_> { \
+ static constexpr auto &proc = proc_; \
+ static constexpr CommandFlags flags = (CommandFlags)(flags_); \
+ static constexpr CommandType type = type_; \
+ static inline constexpr const char *name = #proc_; \
+ };
/**
* Define a callback function for the client, after the command is finished.
diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp
index 792dd624b..f18fe343a 100644
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -36,6 +36,7 @@
#include "goal_base.h"
#include "story_base.h"
#include "widgets/statusbar_widget.h"
+#include "company_cmd.h"
#include "table/strings.h"
diff --git a/src/company_cmd.h b/src/company_cmd.h
new file mode 100644
index 000000000..0d3e2d2fd
--- /dev/null
+++ b/src/company_cmd.h
@@ -0,0 +1,29 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file company_cmd.h Command definitions related to companies. */
+
+#ifndef COMPANY_CMD_H
+#define COMPANY_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdCompanyCtrl;
+CommandProc CmdGiveMoney;
+CommandProc CmdRenameCompany;
+CommandProc CmdRenamePresident;
+CommandProc CmdSetCompanyManagerFace;
+CommandProc CmdSetCompanyColour;
+
+DEF_CMD_TRAIT(CMD_COMPANY_CTRL, CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID | CMD_NO_EST, CMDT_SERVER_SETTING)
+DEF_CMD_TRAIT(CMD_GIVE_MONEY, CmdGiveMoney, 0, CMDT_MONEY_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_RENAME_COMPANY, CmdRenameCompany, 0, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_RENAME_PRESIDENT, CmdRenamePresident, 0, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_COMPANY_MANAGER_FACE, CmdSetCompanyManagerFace, 0, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_COMPANY_COLOUR, CmdSetCompanyColour, 0, CMDT_OTHER_MANAGEMENT)
+
+#endif /* COMPANY_CMD_H */
diff --git a/src/depot_cmd.cpp b/src/depot_cmd.cpp
index 6f5ddda27..e49936f55 100644
--- a/src/depot_cmd.cpp
+++ b/src/depot_cmd.cpp
@@ -16,6 +16,7 @@
#include "vehicle_gui.h"
#include "vehiclelist.h"
#include "window_func.h"
+#include "depot_cmd.h"
#include "table/strings.h"
diff --git a/src/depot_cmd.h b/src/depot_cmd.h
new file mode 100644
index 000000000..9c39db1e2
--- /dev/null
+++ b/src/depot_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 <http://www.gnu.org/licenses/>.
+ */
+
+/** @file depot_cmd.h Command definitions related to depots. */
+
+#ifndef DEPOT_CMD_H
+#define DEPOT_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdRenameDepot;
+
+DEF_CMD_TRAIT(CMD_RENAME_DEPOT, CmdRenameDepot, 0, CMDT_OTHER_MANAGEMENT)
+
+#endif /* DEPOT_CMD_H */
diff --git a/src/economy.cpp b/src/economy.cpp
index 3beeb25f5..329a0a5a8 100644
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -48,6 +48,7 @@
#include "goal_base.h"
#include "story_base.h"
#include "linkgraph/refresh.h"
+#include "economy_cmd.h"
#include "table/strings.h"
#include "table/pricebase.h"
diff --git a/src/economy_cmd.h b/src/economy_cmd.h
new file mode 100644
index 000000000..f182af81f
--- /dev/null
+++ b/src/economy_cmd.h
@@ -0,0 +1,23 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file economy_cmd.h Command definitions related to the economy. */
+
+#ifndef ECONOMY_CMD_H
+#define ECONOMY_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdBuyShareInCompany;
+CommandProc CmdSellShareInCompany;
+CommandProc CmdBuyCompany;
+
+DEF_CMD_TRAIT(CMD_BUY_SHARE_IN_COMPANY, CmdBuyShareInCompany, 0, CMDT_MONEY_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SELL_SHARE_IN_COMPANY, CmdSellShareInCompany, 0, CMDT_MONEY_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_BUY_COMPANY, CmdBuyCompany, 0, CMDT_MONEY_MANAGEMENT)
+
+#endif /* ECONOMY_CMD_H */
diff --git a/src/engine.cpp b/src/engine.cpp
index f330cf604..56f81ffce 100644
--- a/src/engine.cpp
+++ b/src/engine.cpp
@@ -29,6 +29,7 @@
#include "vehicle_func.h"
#include "articulated_vehicles.h"
#include "error.h"
+#include "engine_base.h"
#include "table/strings.h"
#include "table/engines.h"
diff --git a/src/engine_cmd.h b/src/engine_cmd.h
new file mode 100644
index 000000000..3ed47e805
--- /dev/null
+++ b/src/engine_cmd.h
@@ -0,0 +1,25 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file engine_cmd.h Command definitions related to engines. */
+
+#ifndef ENGINE_CMD_H
+#define ENGINE_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdWantEnginePreview;
+CommandProc CmdEngineCtrl;
+CommandProc CmdRenameEngine;
+CommandProc CmdSetVehicleVisibility;
+
+DEF_CMD_TRAIT(CMD_WANT_ENGINE_PREVIEW, CmdWantEnginePreview, 0, CMDT_VEHICLE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_ENGINE_CTRL, CmdEngineCtrl, CMD_DEITY, CMDT_VEHICLE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_RENAME_ENGINE, CmdRenameEngine, CMD_SERVER, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_VEHICLE_VISIBILITY, CmdSetVehicleVisibility, 0, CMDT_COMPANY_SETTING)
+
+#endif /* ENGINE_CMD_H */
diff --git a/src/goal.cpp b/src/goal.cpp
index c61165059..7c24386d1 100644
--- a/src/goal.cpp
+++ b/src/goal.cpp
@@ -23,6 +23,7 @@
#include "network/network.h"
#include "network/network_base.h"
#include "network/network_func.h"
+#include "goal_cmd.h"
#include "safeguards.h"
diff --git a/src/goal_cmd.h b/src/goal_cmd.h
new file mode 100644
index 000000000..3b047f11a
--- /dev/null
+++ b/src/goal_cmd.h
@@ -0,0 +1,31 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file goal_cmd.h Command definitions related to goals. */
+
+#ifndef GOAL_CMD_H
+#define GOAL_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdCreateGoal;
+CommandProc CmdRemoveGoal;
+CommandProc CmdSetGoalText;
+CommandProc CmdSetGoalProgress;
+CommandProc CmdSetGoalCompleted;
+CommandProc CmdGoalQuestion;
+CommandProc CmdGoalQuestionAnswer;
+
+DEF_CMD_TRAIT(CMD_CREATE_GOAL, CmdCreateGoal, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_REMOVE_GOAL, CmdRemoveGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_GOAL_TEXT, CmdSetGoalText, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_GOAL_PROGRESS, CmdSetGoalProgress, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_GOAL_COMPLETED, CmdSetGoalCompleted, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_GOAL_QUESTION, CmdGoalQuestion, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_GOAL_QUESTION_ANSWER, CmdGoalQuestionAnswer, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+
+#endif /* GOAL_CMD_H */
diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp
index ec4358f76..8b67fbeae 100644
--- a/src/group_cmd.cpp
+++ b/src/group_cmd.cpp
@@ -19,6 +19,7 @@
#include "company_func.h"
#include "core/pool_func.hpp"
#include "order_backup.h"
+#include "group_cmd.h"
#include "table/strings.h"
diff --git a/src/group_cmd.h b/src/group_cmd.h
new file mode 100644
index 000000000..a58a6f8aa
--- /dev/null
+++ b/src/group_cmd.h
@@ -0,0 +1,33 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file group_cmd.h Command definitions related to engine groups. */
+
+#ifndef GROUP_CMD_H
+#define GROUP_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdCreateGroup;
+CommandProc CmdAlterGroup;
+CommandProc CmdDeleteGroup;
+CommandProc CmdAddVehicleGroup;
+CommandProc CmdAddSharedVehicleGroup;
+CommandProc CmdRemoveAllVehiclesGroup;
+CommandProc CmdSetGroupFlag;
+CommandProc CmdSetGroupLivery;
+
+DEF_CMD_TRAIT(CMD_CREATE_GROUP, CmdCreateGroup, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_DELETE_GROUP, CmdDeleteGroup, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_ALTER_GROUP, CmdAlterGroup, 0, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_ADD_VEHICLE_GROUP, CmdAddVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_ADD_SHARED_VEHICLE_GROUP, CmdAddSharedVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_REMOVE_ALL_VEHICLES_GROUP, CmdRemoveAllVehiclesGroup, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_GROUP_FLAG, CmdSetGroupFlag, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_GROUP_LIVERY, CmdSetGroupLivery, 0, CMDT_ROUTE_MANAGEMENT)
+
+#endif /* GROUP_CMD_H */
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp
index 529e01edb..a24f35f75 100644
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -42,6 +42,7 @@
#include "error.h"
#include "cmd_helper.h"
#include "string_func.h"
+#include "industry_cmd.h"
#include "table/strings.h"
#include "table/industry_land.h"
diff --git a/src/industry_cmd.h b/src/industry_cmd.h
new file mode 100644
index 000000000..e1f18932a
--- /dev/null
+++ b/src/industry_cmd.h
@@ -0,0 +1,21 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file industry_cmd.h Command definitions related to industries. */
+
+#ifndef INDUSTRY_CMD_H
+#define INDUSTRY_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdBuildIndustry;
+CommandProc CmdIndustryCtrl;
+
+DEF_CMD_TRAIT(CMD_BUILD_INDUSTRY, CmdBuildIndustry, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_INDUSTRY_CTRL, CmdIndustryCtrl, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+
+#endif /* INDUSTRY_CMD_H */
diff --git a/src/landscape.cpp b/src/landscape.cpp
index 242ee089a..1cc3b1ad2 100644
--- a/src/landscape.cpp
+++ b/src/landscape.cpp
@@ -31,6 +31,7 @@
#include "pathfinder/npf/aystar.h"
#include "saveload/saveload.h"
#include "framerate_type.h"
+#include "landscape_cmd.h"
#include <array>
#include <list>
#include <set>
diff --git a/src/landscape_cmd.h b/src/landscape_cmd.h
new file mode 100644
index 000000000..f3b6fd3fc
--- /dev/null
+++ b/src/landscape_cmd.h
@@ -0,0 +1,21 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file landscape_cmd.h Command definitions related to landscape (slopes etc.). */
+
+#ifndef LANDSCAPE_CMD_H
+#define LANDSCAPE_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdLandscapeClear;
+CommandProc CmdClearArea;
+
+DEF_CMD_TRAIT(CMD_LANDSCAPE_CLEAR, CmdLandscapeClear, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_CLEAR_AREA, CmdClearArea, CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION) // destroying multi-tile houses makes town rating differ between test and execution
+
+#endif /* LANDSCAPE_CMD_H */
diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp
index c461d36dc..2e70f5fdd 100644
--- a/src/misc_cmd.cpp
+++ b/src/misc_cmd.cpp
@@ -22,6 +22,7 @@
#include "tile_map.h"
#include "texteff.hpp"
#include "core/backup_type.hpp"
+#include "misc_cmd.h"
#include "table/strings.h"
diff --git a/src/misc_cmd.h b/src/misc_cmd.h
new file mode 100644
index 000000000..6827db3ac
--- /dev/null
+++ b/src/misc_cmd.h
@@ -0,0 +1,27 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file misc_cmd.h Miscellaneous command definitions. */
+
+#ifndef MISC_CMD_H
+#define MISC_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdMoneyCheat;
+CommandProc CmdChangeBankBalance;
+CommandProc CmdIncreaseLoan;
+CommandProc CmdDecreaseLoan;
+CommandProc CmdPause;
+
+DEF_CMD_TRAIT(CMD_MONEY_CHEAT, CmdMoneyCheat, CMD_OFFLINE, CMDT_CHEAT)
+DEF_CMD_TRAIT(CMD_CHANGE_BANK_BALANCE, CmdChangeBankBalance, CMD_DEITY, CMDT_MONEY_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_INCREASE_LOAN, CmdIncreaseLoan, 0, CMDT_MONEY_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_DECREASE_LOAN, CmdDecreaseLoan, 0, CMDT_MONEY_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_PAUSE, CmdPause, CMD_SERVER | CMD_NO_EST, CMDT_SERVER_SETTING)
+
+#endif /* MISC_CMD_H */
diff --git a/src/news_cmd.h b/src/news_cmd.h
new file mode 100644
index 000000000..4a75037b3
--- /dev/null
+++ b/src/news_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 <http://www.gnu.org/licenses/>.
+ */
+
+/** @file news_cmd.h Command definitions related to news messages. */
+
+#ifndef NEWS_CMD_H
+#define NEWS_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdCustomNewsItem;
+
+DEF_CMD_TRAIT(CMD_CUSTOM_NEWS_ITEM, CmdCustomNewsItem, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+
+#endif /* NEWS_CMD_H */
diff --git a/src/news_gui.cpp b/src/news_gui.cpp
index 10a49b62e..3f3b91867 100644
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -35,6 +35,7 @@
#include "guitimer_func.h"
#include "group_gui.h"
#include "zoom_func.h"
+#include "news_cmd.h"
#include "widgets/news_widget.h"
diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp
index 328cadd93..f207d4786 100644
--- a/src/object_cmd.cpp
+++ b/src/object_cmd.cpp
@@ -33,6 +33,7 @@
#include "newgrf_debug.h"
#include "vehicle_func.h"
#include "station_func.h"
+#include "object_cmd.h"
#include "table/strings.h"
#include "table/object_land.h"
diff --git a/src/object_cmd.h b/src/object_cmd.h
new file mode 100644
index 000000000..b7119afc3
--- /dev/null
+++ b/src/object_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 <http://www.gnu.org/licenses/>.
+ */
+
+/** @file object_cmd.h Command definitions related to objects. */
+
+#ifndef OBJECT_CMD_H
+#define OBJECT_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdBuildObject;
+
+DEF_CMD_TRAIT(CMD_BUILD_OBJECT, CmdBuildObject, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+
+#endif /* OBJECT_CMD_H */
diff --git a/src/order_backup.cpp b/src/order_backup.cpp
index cba46941c..51e1b67ff 100644
--- a/src/order_backup.cpp
+++ b/src/order_backup.cpp
@@ -16,6 +16,7 @@
#include "vehicle_base.h"
#include "window_func.h"
#include "station_map.h"
+#include "order_cmd.h"
#include "safeguards.h"
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp
index b681b6379..2f366b674 100644
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -26,6 +26,7 @@
#include "company_base.h"
#include "order_backup.h"
#include "cheat_type.h"
+#include "order_cmd.h"
#include "table/strings.h"
diff --git a/src/order_cmd.h b/src/order_cmd.h
new file mode 100644
index 000000000..606cbef60
--- /dev/null
+++ b/src/order_cmd.h
@@ -0,0 +1,33 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file order_cmd.h Command definitions related to orders. */
+
+#ifndef ORDER_CMD_H
+#define ORDER_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdModifyOrder;
+CommandProc CmdSkipToOrder;
+CommandProc CmdDeleteOrder;
+CommandProc CmdInsertOrder;
+CommandProc CmdOrderRefit;
+CommandProc CmdCloneOrder;
+CommandProc CmdMoveOrder;
+CommandProc CmdClearOrderBackup;
+
+DEF_CMD_TRAIT(CMD_MODIFY_ORDER, CmdModifyOrder, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SKIP_TO_ORDER, CmdSkipToOrder, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_DELETE_ORDER, CmdDeleteOrder, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_INSERT_ORDER, CmdInsertOrder, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_ORDER_REFIT, CmdOrderRefit, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_CLONE_ORDER, CmdCloneOrder, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_MOVE_ORDER, CmdMoveOrder, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_CLEAR_ORDER_BACKUP, CmdClearOrderBackup, CMD_CLIENT_ID, CMDT_SERVER_SETTING)
+
+#endif /* ORDER_CMD_H */
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp
index 8ff8d6453..449254f51 100644
--- a/src/rail_cmd.cpp
+++ b/src/rail_cmd.cpp
@@ -31,6 +31,7 @@
#include "strings_func.h"
#include "company_gui.h"
#include "object_map.h"
+#include "rail_cmd.h"
#include "table/strings.h"
#include "table/railtypes.h"
diff --git a/src/rail_cmd.h b/src/rail_cmd.h
new file mode 100644
index 000000000..e625eb03d
--- /dev/null
+++ b/src/rail_cmd.h
@@ -0,0 +1,37 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file rail_cmd.h Command definitions for rail. */
+
+#ifndef RAIL_CMD_H
+#define RAIL_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdBuildRailroadTrack;
+CommandProc CmdRemoveRailroadTrack;
+CommandProc CmdBuildSingleRail;
+CommandProc CmdRemoveSingleRail;
+CommandProc CmdBuildTrainDepot;
+CommandProc CmdBuildSingleSignal;
+CommandProc CmdRemoveSingleSignal;
+CommandProc CmdConvertRail;
+CommandProc CmdBuildSignalTrack;
+CommandProc CmdRemoveSignalTrack;
+
+DEF_CMD_TRAIT(CMD_BUILD_RAILROAD_TRACK, CmdBuildRailroadTrack, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_REMOVE_RAILROAD_TRACK, CmdRemoveRailroadTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_SINGLE_RAIL, CmdBuildSingleRail, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_REMOVE_SINGLE_RAIL, CmdRemoveSingleRail, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_TRAIN_DEPOT, CmdBuildTrainDepot, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_SIGNALS, CmdBuildSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_REMOVE_SIGNALS, CmdRemoveSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_CONVERT_RAIL, CmdConvertRail, 0, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_SIGNAL_TRACK, CmdBuildSignalTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_REMOVE_SIGNAL_TRACK, CmdRemoveSignalTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+
+#endif /* RAIL_CMD_H */
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp
index 942cce7a5..b3f6f4431 100644
--- a/src/road_cmd.cpp
+++ b/src/road_cmd.cpp
@@ -37,6 +37,7 @@
#include "genworld.h"
#include "company_gui.h"
#include "road_func.h"
+#include "road_cmd.h"
#include "table/strings.h"
#include "table/roadtypes.h"
diff --git a/src/road_cmd.h b/src/road_cmd.h
index 753ebd21d..4908f72e3 100644
--- a/src/road_cmd.h
+++ b/src/road_cmd.h
@@ -12,8 +12,21 @@
#include "direction_type.h"
#include "road_type.h"
+#include "command_type.h"
void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt);
void UpdateNearestTownForRoadTiles(bool invalidate);
+CommandProc CmdBuildLongRoad;
+CommandProc CmdRemoveLongRoad;
+CommandProc CmdBuildRoad;
+CommandProc CmdBuildRoadDepot;
+CommandProc CmdConvertRoad;
+
+DEF_CMD_TRAIT(CMD_BUILD_LONG_ROAD, CmdBuildLongRoad, CMD_AUTO | CMD_NO_WATER | CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_REMOVE_LONG_ROAD, CmdRemoveLongRoad, CMD_AUTO | CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION) // 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_TRAIT(CMD_BUILD_ROAD, CmdBuildRoad, CMD_AUTO | CMD_NO_WATER | CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_ROAD_DEPOT, CmdBuildRoadDepot, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_CONVERT_ROAD, CmdConvertRoad, 0, CMDT_LANDSCAPE_CONSTRUCTION)
+
#endif /* ROAD_CMD_H */
diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp
index b20748fa0..9e72fd30d 100644
--- a/src/roadveh_cmd.cpp
+++ b/src/roadveh_cmd.cpp
@@ -34,6 +34,7 @@
#include "newgrf.h"
#include "zoom_func.h"
#include "framerate_type.h"
+#include "roadveh_cmd.h"
#include "table/strings.h"
diff --git a/src/roadveh_cmd.h b/src/roadveh_cmd.h
new file mode 100644
index 000000000..42053df16
--- /dev/null
+++ b/src/roadveh_cmd.h
@@ -0,0 +1,23 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file roadveh_cmd.h Command definitions related to road vehicles. */
+
+#ifndef ROADVEH_CMD_H
+#define ROADVEH_CMD_H
+
+#include "command_type.h"
+#include "engine_type.h"
+#include "vehicle_type.h"
+
+CommandCost CmdBuildRoadVehicle(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v);
+
+CommandProc CmdTurnRoadVeh;
+
+DEF_CMD_TRAIT(CMD_TURN_ROADVEH, CmdTurnRoadVeh, 0, CMDT_VEHICLE_MANAGEMENT)
+
+#endif /* ROADVEH_CMD_H */
diff --git a/src/settings.cpp b/src/settings.cpp
index b82fe6d9a..10d87cf9d 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -44,6 +44,7 @@
#include "newgrf_config.h"
#include "fios.h"
#include "fileio_func.h"
+#include "settings_cmd.h"
#include "table/strings.h"
diff --git a/src/settings_cmd.h b/src/settings_cmd.h
new file mode 100644
index 000000000..15b9c31a4
--- /dev/null
+++ b/src/settings_cmd.h
@@ -0,0 +1,21 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file settings_cmd.h Command definitions related to settings. */
+
+#ifndef SETTINGS_CMD_H
+#define SETTINGS_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdChangeSetting;
+CommandProc CmdChangeCompanySetting;
+
+DEF_CMD_TRAIT(CMD_CHANGE_SETTING, CmdChangeSetting, CMD_SERVER, CMDT_SERVER_SETTING)
+DEF_CMD_TRAIT(CMD_CHANGE_COMPANY_SETTING, CmdChangeCompanySetting, 0, CMDT_COMPANY_SETTING)
+
+#endif /* SETTINGS_CMD_H */
diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp
index 7f9dab0f1..bab291b8a 100644
--- a/src/ship_cmd.cpp
+++ b/src/ship_cmd.cpp
@@ -34,6 +34,7 @@
#include "framerate_type.h"
#include "industry.h"
#include "industry_map.h"
+#include "ship_cmd.h"
#include "table/strings.h"
diff --git a/src/ship_cmd.h b/src/ship_cmd.h
new file mode 100644
index 000000000..a451cf0a4
--- /dev/null
+++ b/src/ship_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 <http://www.gnu.org/licenses/>.
+ */
+
+/** @file ship_cmd.h Command definitions related to ships. */
+
+#ifndef SHIP_CMD_H
+#define SHIP_CMD_H
+
+#include "command_type.h"
+#include "engine_type.h"
+#include "vehicle_type.h"
+
+CommandCost CmdBuildShip(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v);
+
+#endif /* SHIP_CMD_H */
diff --git a/src/signs_cmd.cpp b/src/signs_cmd.cpp
index 504bae078..8aa398755 100644
--- a/src/signs_cmd.cpp
+++ b/src/signs_cmd.cpp
@@ -17,6 +17,7 @@
#include "viewport_kdtree.h"
#include "window_func.h"
#include "string_func.h"
+#include "signs_cmd.h"
#include "table/strings.h"
diff --git a/src/signs_cmd.h b/src/signs_cmd.h
new file mode 100644
index 000000000..85f0ffbdf
--- /dev/null
+++ b/src/signs_cmd.h
@@ -0,0 +1,21 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file signs_cmd.h Command definitions related to signs. */
+
+#ifndef SIGNS_CMD_H
+#define SIGNS_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdPlaceSign;
+CommandProc CmdRenameSign;
+
+DEF_CMD_TRAIT(CMD_PLACE_SIGN, CmdPlaceSign, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_RENAME_SIGN, CmdRenameSign, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+
+#endif /* SIGNS_CMD_H */
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 713d38374..20ef6c997 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -56,6 +56,8 @@
#include "linkgraph/refresh.h"
#include "widgets/station_widget.h"
#include "tunnelbridge_map.h"
+#include "station_cmd.h"
+#include "waypoint_cmd.h"
#include "table/strings.h"
diff --git a/src/station_cmd.h b/src/station_cmd.h
new file mode 100644
index 000000000..8e1facc25
--- /dev/null
+++ b/src/station_cmd.h
@@ -0,0 +1,33 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file station_cmd.h Command definitions related to stations. */
+
+#ifndef STATION_CMD_H
+#define STATION_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdBuildAirport;
+CommandProc CmdBuildDock;
+CommandProc CmdBuildRailStation;
+CommandProc CmdRemoveFromRailStation;
+CommandProc CmdBuildRoadStop;
+CommandProc CmdRemoveRoadStop;
+CommandProc CmdRenameStation;
+CommandProc CmdOpenCloseAirport;
+
+DEF_CMD_TRAIT(CMD_BUILD_AIRPORT, CmdBuildAirport, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_DOCK, CmdBuildDock, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_RAIL_STATION, CmdBuildRailStation, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_REMOVE_FROM_RAIL_STATION, CmdRemoveFromRailStation, 0, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_ROAD_STOP, CmdBuildRoadStop, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_REMOVE_ROAD_STOP, CmdRemoveRoadStop, 0, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_RENAME_STATION, CmdRenameStation, 0, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_OPEN_CLOSE_AIRPORT, CmdOpenCloseAirport, 0, CMDT_ROUTE_MANAGEMENT)
+
+#endif /* STATION_CMD_H */
diff --git a/src/story.cpp b/src/story.cpp
index 641ed7fbf..4c58b19a5 100644
--- a/src/story.cpp
+++ b/src/story.cpp
@@ -25,6 +25,7 @@
#include "game/game.hpp"
#include "script/api/script_story_page.hpp"
#include "script/api/script_event_types.hpp"
+#include "story_cmd.h"
#include "safeguards.h"
diff --git a/src/story_cmd.h b/src/story_cmd.h
new file mode 100644
index 000000000..a7323ec6b
--- /dev/null
+++ b/src/story_cmd.h
@@ -0,0 +1,35 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file story_cmd.h Command definitions related to stories. */
+
+#ifndef STORY_CMD_H
+#define STORY_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdCreateStoryPage;
+CommandProc CmdCreateStoryPageElement;
+CommandProc CmdUpdateStoryPageElement;
+CommandProc CmdSetStoryPageTitle;
+CommandProc CmdSetStoryPageDate;
+CommandProc CmdShowStoryPage;
+CommandProc CmdRemoveStoryPage;
+CommandProc CmdRemoveStoryPageElement;
+CommandProc CmdStoryPageButton;
+
+DEF_CMD_TRAIT(CMD_CREATE_STORY_PAGE, CmdCreateStoryPage, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_CREATE_STORY_PAGE_ELEMENT, CmdCreateStoryPageElement, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_UPDATE_STORY_PAGE_ELEMENT, CmdUpdateStoryPageElement, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_STORY_PAGE_TITLE, CmdSetStoryPageTitle, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_STORY_PAGE_DATE, CmdSetStoryPageDate, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SHOW_STORY_PAGE, CmdShowStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_REMOVE_STORY_PAGE, CmdRemoveStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_REMOVE_STORY_PAGE_ELEMENT, CmdRemoveStoryPageElement, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_STORY_PAGE_BUTTON, CmdStoryPageButton, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+
+#endif /* STORY_CMD_H */
diff --git a/src/subsidy.cpp b/src/subsidy.cpp
index e8fc951c4..ecead2612 100644
--- a/src/subsidy.cpp
+++ b/src/subsidy.cpp
@@ -24,6 +24,7 @@
#include "command_func.h"
#include "string_func.h"
#include "tile_cmd.h"
+#include "subsidy_cmd.h"
#include "table/strings.h"
diff --git a/src/subsidy_cmd.h b/src/subsidy_cmd.h
new file mode 100644
index 000000000..f68c9b303
--- /dev/null
+++ b/src/subsidy_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 <http://www.gnu.org/licenses/>.
+ */
+
+/** @file subsidy_cmd.h Command definitions related to subsidies. */
+
+#ifndef SUBSIDY_CMD_H
+#define SUBSIDY_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdCreateSubsidy;
+
+DEF_CMD_TRAIT(CMD_CREATE_SUBSIDY, CmdCreateSubsidy, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+
+#endif /* SUBSIDY_CMD_H */
diff --git a/src/table/CMakeLists.txt b/src/table/CMakeLists.txt
index c4043681b..3a615135e 100644
--- a/src/table/CMakeLists.txt
+++ b/src/table/CMakeLists.txt
@@ -34,7 +34,7 @@ add_files(
town_land.h
townname.h
track_land.h
- train_cmd.h
+ train_sprites.h
tree_land.h
unicode.h
water_land.h
diff --git a/src/table/train_cmd.h b/src/table/train_sprites.h
index f9419990b..5811ec7f3 100644
--- a/src/table/train_cmd.h
+++ b/src/table/train_sprites.h
@@ -5,7 +5,7 @@
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
-/** @file train_cmd.h Sprites to use for trains. */
+/** @file train_sprites.h Sprites to use for trains. */
static const SpriteID _engine_sprite_base[] = {
0x0B59, 0x0B61, 0x0B69, 0x0BE1, 0x0B71, 0x0B75, 0x0B7D, 0x0B7D,
diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp
index 205a36416..723b3953e 100644
--- a/src/terraform_cmd.cpp
+++ b/src/terraform_cmd.cpp
@@ -17,6 +17,7 @@
#include "company_base.h"
#include "company_func.h"
#include "core/backup_type.hpp"
+#include "terraform_cmd.h"
#include "table/strings.h"
diff --git a/src/terraform_cmd.h b/src/terraform_cmd.h
new file mode 100644
index 000000000..88aeaec4c
--- /dev/null
+++ b/src/terraform_cmd.h
@@ -0,0 +1,21 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file terraform_cmd.h Command definitions related to terraforming. */
+
+#ifndef TERRAFORM_CMD_H
+#define TERRAFORM_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdTerraformLand;
+CommandProc CmdLevelLand;
+
+DEF_CMD_TRAIT(CMD_TERRAFORM_LAND, CmdTerraformLand, CMD_ALL_TILES | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_LEVEL_LAND, CmdLevelLand, CMD_ALL_TILES | CMD_AUTO | CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION) // test run might clear tiles multiple times, in execution that only happens once
+
+#endif /* TERRAFORM_CMD_H */
diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp
index b8f3adc69..a83e877a7 100644
--- a/src/timetable_cmd.cpp
+++ b/src/timetable_cmd.cpp
@@ -14,6 +14,7 @@
#include "window_func.h"
#include "vehicle_base.h"
#include "cmd_helper.h"
+#include "timetable_cmd.h"
#include "table/strings.h"
diff --git a/src/timetable_cmd.h b/src/timetable_cmd.h
new file mode 100644
index 000000000..ba5e2b37e
--- /dev/null
+++ b/src/timetable_cmd.h
@@ -0,0 +1,25 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file timetable_cmd.h Command definitions related to timetables. */
+
+#ifndef TIMETABLE_CMD_H
+#define TIMETABLE_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdChangeTimetable;
+CommandProc CmdSetVehicleOnTime;
+CommandProc CmdAutofillTimetable;
+CommandProc CmdSetTimetableStart;
+
+DEF_CMD_TRAIT(CMD_CHANGE_TIMETABLE, CmdChangeTimetable, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_VEHICLE_ON_TIME, CmdSetVehicleOnTime, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_AUTOFILL_TIMETABLE, CmdAutofillTimetable, 0, CMDT_ROUTE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_SET_TIMETABLE_START, CmdSetTimetableStart, 0, CMDT_ROUTE_MANAGEMENT)
+
+#endif /* TIMETABLE_CMD_H */
diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp
index 27a9e6978..542d1bc39 100644
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -48,6 +48,7 @@
#include "object_base.h"
#include "ai/ai.hpp"
#include "game/game.hpp"
+#include "town_cmd.h"
#include "table/strings.h"
#include "table/town_land.h"
diff --git a/src/town_cmd.h b/src/town_cmd.h
new file mode 100644
index 000000000..bd4f4de11
--- /dev/null
+++ b/src/town_cmd.h
@@ -0,0 +1,35 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file town_cmd.h Command definitions related to towns. */
+
+#ifndef TOWN_CMD_H
+#define TOWN_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdFoundTown;
+CommandProc CmdRenameTown;
+CommandProc CmdDoTownAction;
+CommandProc CmdTownGrowthRate;
+CommandProc CmdTownRating;
+CommandProc CmdTownCargoGoal;
+CommandProc CmdTownSetText;
+CommandProc CmdExpandTown;
+CommandProc CmdDeleteTown;
+
+DEF_CMD_TRAIT(CMD_FOUND_TOWN, CmdFoundTown, CMD_DEITY | CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION) // founding random town can fail only in exec run
+DEF_CMD_TRAIT(CMD_RENAME_TOWN, CmdRenameTown, CMD_DEITY | CMD_SERVER, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_DO_TOWN_ACTION, CmdDoTownAction, 0, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_TOWN_CARGO_GOAL, CmdTownCargoGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_TOWN_GROWTH_RATE, CmdTownGrowthRate, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_TOWN_RATING, CmdTownRating, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_TOWN_SET_TEXT, CmdTownSetText, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_EXPAND_TOWN, CmdExpandTown, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_DELETE_TOWN, CmdDeleteTown, CMD_OFFLINE, CMDT_LANDSCAPE_CONSTRUCTION)
+
+#endif /* TOWN_CMD_H */
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index e0a70d14f..ad9f6e90d 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -34,9 +34,10 @@
#include "zoom_func.h"
#include "newgrf_debug.h"
#include "framerate_type.h"
+#include "train_cmd.h"
#include "table/strings.h"
-#include "table/train_cmd.h"
+#include "table/train_sprites.h"
#include "safeguards.h"
diff --git a/src/train_cmd.h b/src/train_cmd.h
new file mode 100644
index 000000000..3dc54678e
--- /dev/null
+++ b/src/train_cmd.h
@@ -0,0 +1,28 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file train_cmd.h Command definitions related to trains. */
+
+#ifndef TRAIN_CMD_H
+#define TRAIN_CMD_H
+
+#include "command_type.h"
+#include "engine_type.h"
+#include "vehicle_type.h"
+
+CommandCost CmdBuildRailVehicle(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v);
+CommandCost CmdSellRailWagon(DoCommandFlag flags, Vehicle *v, uint16 data, uint32 user);
+
+CommandProc CmdMoveRailVehicle;
+CommandProc CmdForceTrainProceed;
+CommandProc CmdReverseTrainDirection;
+
+DEF_CMD_TRAIT(CMD_MOVE_RAIL_VEHICLE, CmdMoveRailVehicle, 0, CMDT_VEHICLE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_FORCE_TRAIN_PROCEED, CmdForceTrainProceed, 0, CMDT_VEHICLE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_REVERSE_TRAIN_DIRECTION, CmdReverseTrainDirection, 0, CMDT_VEHICLE_MANAGEMENT)
+
+#endif /* TRAIN_CMD_H */
diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp
index 626f0386f..20943e02e 100644
--- a/src/tree_cmd.cpp
+++ b/src/tree_cmd.cpp
@@ -23,6 +23,7 @@
#include "core/random_func.hpp"
#include "newgrf_generic.h"
#include "date_func.h"
+#include "tree_cmd.h"
#include "table/strings.h"
#include "table/tree_land.h"
diff --git a/src/tree_cmd.h b/src/tree_cmd.h
new file mode 100644
index 000000000..de8d00179
--- /dev/null
+++ b/src/tree_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 <http://www.gnu.org/licenses/>.
+ */
+
+/** @file tree_cmd.h Command definitions related to tree tiles. */
+
+#ifndef TREE_CMD_H
+#define TREE_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdPlantTree;
+
+DEF_CMD_TRAIT(CMD_PLANT_TREE, CmdPlantTree, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+
+#endif /* TREE_CMD_H */
diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp
index 9c77dff9d..4c7836a7a 100644
--- a/src/tunnelbridge_cmd.cpp
+++ b/src/tunnelbridge_cmd.cpp
@@ -40,6 +40,7 @@
#include "water.h"
#include "company_gui.h"
#include "station_func.h"
+#include "tunnelbridge_cmd.h"
#include "table/strings.h"
#include "table/bridge_land.h"
diff --git a/src/tunnelbridge_cmd.h b/src/tunnelbridge_cmd.h
new file mode 100644
index 000000000..58cb9b32a
--- /dev/null
+++ b/src/tunnelbridge_cmd.h
@@ -0,0 +1,21 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file tunnelbridge_cmd.h Command definitions related to tunnels and bridges. */
+
+#ifndef TUNNELBRIDGE_CMD_H
+#define TUNNELBRIDGE_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdBuildBridge;
+CommandProc CmdBuildTunnel;
+
+DEF_CMD_TRAIT(CMD_BUILD_BRIDGE, CmdBuildBridge, CMD_DEITY | CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_TUNNEL, CmdBuildTunnel, CMD_DEITY | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+
+#endif /* TUNNELBRIDGE_CMD_H */
diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp
index a36abb59d..472d10459 100644
--- a/src/vehicle_cmd.cpp
+++ b/src/vehicle_cmd.cpp
@@ -30,6 +30,11 @@
#include "newgrf.h"
#include "company_base.h"
#include "core/random_func.hpp"
+#include "vehicle_cmd.h"
+#include "aircraft_cmd.h"
+#include "roadveh_cmd.h"
+#include "train_cmd.h"
+#include "ship_cmd.h"
#include <sstream>
#include <iomanip>
@@ -67,13 +72,6 @@ const StringID _send_to_depot_msg_table[] = {
};
-CommandCost CmdBuildRailVehicle(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v);
-CommandCost CmdBuildRoadVehicle(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v);
-CommandCost CmdBuildShip (TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v);
-CommandCost CmdBuildAircraft (TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v);
-
-CommandCost CmdRefitVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const std::string &text);
-
/**
* Build a vehicle.
* @param tile tile of depot where the vehicle is built
@@ -192,8 +190,6 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
return value;
}
-CommandCost CmdSellRailWagon(DoCommandFlag flags, Vehicle *v, uint16 data, uint32 user);
-
/**
* Sell a vehicle.
* @param tile unused.
diff --git a/src/vehicle_cmd.h b/src/vehicle_cmd.h
new file mode 100644
index 000000000..a2d8d62bf
--- /dev/null
+++ b/src/vehicle_cmd.h
@@ -0,0 +1,39 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file vehicle_cmd.h Command definitions for vehicles. */
+
+#ifndef VEHICLE_CMD_H
+#define VEHICLE_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdBuildVehicle;
+CommandProc CmdSellVehicle;
+CommandProc CmdRefitVehicle;
+CommandProc CmdSendVehicleToDepot;
+CommandProc CmdChangeServiceInt;
+CommandProc CmdRenameVehicle;
+CommandProc CmdCloneVehicle;
+CommandProc CmdStartStopVehicle;
+CommandProc CmdMassStartStopVehicle;
+CommandProc CmdDepotSellAllVehicles;
+CommandProc CmdDepotMassAutoReplace;
+
+DEF_CMD_TRAIT(CMD_BUILD_VEHICLE, CmdBuildVehicle, CMD_CLIENT_ID, CMDT_VEHICLE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_SELL_VEHICLE, CmdSellVehicle, CMD_CLIENT_ID, CMDT_VEHICLE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_REFIT_VEHICLE, CmdRefitVehicle, 0, CMDT_VEHICLE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_SEND_VEHICLE_TO_DEPOT, CmdSendVehicleToDepot, 0, CMDT_VEHICLE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_CHANGE_SERVICE_INT, CmdChangeServiceInt, 0, CMDT_VEHICLE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_RENAME_VEHICLE, CmdRenameVehicle, 0, CMDT_OTHER_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_CLONE_VEHICLE, CmdCloneVehicle, CMD_NO_TEST, CMDT_VEHICLE_CONSTRUCTION) // NewGRF callbacks influence building and refitting making it impossible to correctly estimate the cost
+DEF_CMD_TRAIT(CMD_START_STOP_VEHICLE, CmdStartStopVehicle, 0, CMDT_VEHICLE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_MASS_START_STOP, CmdMassStartStopVehicle, 0, CMDT_VEHICLE_MANAGEMENT)
+DEF_CMD_TRAIT(CMD_DEPOT_SELL_ALL_VEHICLES, CmdDepotSellAllVehicles, 0, CMDT_VEHICLE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_DEPOT_MASS_AUTOREPLACE, CmdDepotMassAutoReplace, 0, CMDT_VEHICLE_CONSTRUCTION)
+
+#endif /* VEHICLE_CMD_H */
diff --git a/src/viewport.cpp b/src/viewport.cpp
index b3ccba2b5..3a1004164 100644
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -88,6 +88,7 @@
#include "command_func.h"
#include "network/network_func.h"
#include "framerate_type.h"
+#include "viewport_cmd.h"
#include <forward_list>
#include <map>
diff --git a/src/viewport_cmd.h b/src/viewport_cmd.h
new file mode 100644
index 000000000..f549d755e
--- /dev/null
+++ b/src/viewport_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 <http://www.gnu.org/licenses/>.
+ */
+
+/** @file viewport_cmd.h Command definitions related to viewports. */
+
+#ifndef VIEWPORT_CMD_H
+#define VIEWPORT_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdScrollViewport;
+
+DEF_CMD_TRAIT(CMD_SCROLL_VIEWPORT, CmdScrollViewport, CMD_DEITY, CMDT_OTHER_MANAGEMENT)
+
+#endif /* VIEWPORT_CMD_H */
diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp
index 12f300ac2..152e956b1 100644
--- a/src/water_cmd.cpp
+++ b/src/water_cmd.cpp
@@ -38,6 +38,7 @@
#include "company_gui.h"
#include "newgrf_generic.h"
#include "industry.h"
+#include "water_cmd.h"
#include "table/strings.h"
diff --git a/src/water_cmd.h b/src/water_cmd.h
new file mode 100644
index 000000000..ccd18f763
--- /dev/null
+++ b/src/water_cmd.h
@@ -0,0 +1,23 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file water_cmd.h Command definitions related to water tiles. */
+
+#ifndef WATER_CMD_H
+#define WATER_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdBuildShipDepot;
+CommandProc CmdBuildCanal;
+CommandProc CmdBuildLock;
+
+DEF_CMD_TRAIT(CMD_BUILD_SHIP_DEPOT, CmdBuildShipDepot, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_CANAL, CmdBuildCanal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_LOCK, CmdBuildLock, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+
+#endif /* WATER_CMD_H */
diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp
index 77b9fbd02..d55b8f0eb 100644
--- a/src/waypoint_cmd.cpp
+++ b/src/waypoint_cmd.cpp
@@ -28,6 +28,7 @@
#include "company_base.h"
#include "water.h"
#include "company_gui.h"
+#include "waypoint_cmd.h"
#include "table/strings.h"
diff --git a/src/waypoint_cmd.h b/src/waypoint_cmd.h
new file mode 100644
index 000000000..09f7ec5d3
--- /dev/null
+++ b/src/waypoint_cmd.h
@@ -0,0 +1,25 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file waypoint_cmd.h Command definitions related to waypoints. */
+
+#ifndef WAYPOINT_CMD_H
+#define WAYPOINT_CMD_H
+
+#include "command_type.h"
+
+CommandProc CmdBuildRailWaypoint;
+CommandProc CmdRemoveFromRailWaypoint;
+CommandProc CmdBuildBuoy;
+CommandProc CmdRenameWaypoint;
+
+DEF_CMD_TRAIT(CMD_BUILD_RAIL_WAYPOINT, CmdBuildRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_REMOVE_FROM_RAIL_WAYPOINT, CmdRemoveFromRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_BUILD_BUOY, CmdBuildBuoy, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION)
+DEF_CMD_TRAIT(CMD_RENAME_WAYPOINT, CmdRenameWaypoint, 0, CMDT_OTHER_MANAGEMENT)
+
+#endif /* WAYPOINT_CMD_H */