diff options
-rw-r--r-- | newgrf_callbacks.h | 2 | ||||
-rw-r--r-- | train_cmd.c | 12 |
2 files changed, 14 insertions, 0 deletions
diff --git a/newgrf_callbacks.h b/newgrf_callbacks.h index 0d591067b..24a697395 100644 --- a/newgrf_callbacks.h +++ b/newgrf_callbacks.h @@ -25,6 +25,8 @@ enum CallbackID { CBID_TRAIN_ARTIC_ENGINE = 0x16, + CBID_TRAIN_ALLOW_WAGON_ATTACH = 0x1D, + /* This callback is called from vehicle purchase lists. It returns a value to be * used as a custom string ID in the 0xD000 range. */ CBID_VEHICLE_ADDITIONAL_TEXT = 0x23, diff --git a/train_cmd.c b/train_cmd.c index 8d9378848..2b9df49ac 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -27,6 +27,7 @@ #include "train.h" #include "newgrf_callbacks.h" #include "newgrf_engine.h" +#include "newgrf_text.h" #include "direction.h" static bool TrainCheckIfLineEnds(Vehicle *v); @@ -1076,6 +1077,17 @@ int32 CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) if (flags & DC_EXEC) src->unitnumber = unit_num; } + if (dst_head != NULL) { + /* Check NewGRF Callback 0x1D */ + uint16 callback = GetVehicleCallbackParent(CBID_TRAIN_ALLOW_WAGON_ATTACH, 0, 0, dst_head->engine_type, src, dst_head); + if (callback != CALLBACK_FAILED) { + if (callback == 0xFD) return CMD_ERROR; + if (callback < 0xFD) { + StringID error = GetGRFStringID(GetEngineGRFID(dst_head->engine_type), 0xD000 + callback); + return_cmd_error(error); + } + } + } /* do it? */ if (flags & DC_EXEC) { |