# HG changeset patch # User peter1138 # Date 2006-05-02 21:43:47 # Node ID 1785a129fadbe7665fc7a3d1f53b26d45650d452 # Parent 69512c0c5971f2dd39e295ab1b3bf3bf696e2148 (svn r4703) - NewGRF: add support for callback 0x1D, "can wagon be attached". This can be used to disallow freight wagons to be placed in passenger trains, along with other uses. diff --git a/newgrf_callbacks.h b/newgrf_callbacks.h --- 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 --- 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, 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) {