From 2fdce8ee8cb890ac6642b3ee4df7a9a3b6af829f Mon Sep 17 00:00:00 2001 From: peter1138 Date: Tue, 2 May 2006 21:43:47 +0000 Subject: (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. --- newgrf_callbacks.h | 2 ++ train_cmd.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) 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) { -- cgit v1.2.3-54-g00ecf