diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 9b3b7c27e9..477786cf2e 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2991,6 +2991,9 @@ bool AfterLoadGame() ResetSignalHandlers(); AfterLoadLinkGraphs(); + + AfterLoadTemplateVehiclesUpdateImage(); + return true; } @@ -3028,4 +3031,5 @@ void ReloadNewGRFData() /* redraw the whole screen */ MarkWholeScreenDirty(); CheckTrainsLengths(); + AfterLoadTemplateVehiclesUpdateImage(); } diff --git a/src/saveload/saveload_internal.h b/src/saveload/saveload_internal.h index 67b3038a04..914e833f87 100644 --- a/src/saveload/saveload_internal.h +++ b/src/saveload/saveload_internal.h @@ -48,6 +48,8 @@ void ConnectMultiheadedTrains(); Engine *GetTempDataEngine(EngineID index); void CopyTempEngineData(); +void AfterLoadTemplateVehiclesUpdateImage(); + extern int32 _saved_scrollpos_x; extern int32 _saved_scrollpos_y; extern ZoomLevelByte _saved_scrollpos_zoom; diff --git a/src/saveload/tbtr_template_veh_sl.cpp b/src/saveload/tbtr_template_veh_sl.cpp index 3c6ca9e0b6..60c8b6080b 100644 --- a/src/saveload/tbtr_template_veh_sl.cpp +++ b/src/saveload/tbtr_template_veh_sl.cpp @@ -1,6 +1,8 @@ #include "../stdafx.h" #include "../tbtr_template_vehicle.h" +#include "../tbtr_template_vehicle_func.h" +#include "../train.h" #include "saveload.h" @@ -94,6 +96,37 @@ void AfterLoadTemplateVehicles() } } +void AfterLoadTemplateVehiclesUpdateImage() +{ + TemplateVehicle *tv; + + FOR_ALL_TEMPLATES(tv) { + if (tv->Prev() == NULL) { + StringID err; + Train* t = VirtualTrainFromTemplateVehicle(tv, err); + if (t != NULL) { + int tv_len = 0; + for (TemplateVehicle *u = tv; u != NULL; u = u->Next()) { + tv_len++; + } + int t_len = 0; + for (Train *u = t; u != NULL; u = u->Next()) { + t_len++; + } + if (t_len == tv_len) { + Train *v = t; + for (TemplateVehicle *u = tv; u != NULL; u = u->Next(), v = v->Next()) { + u->spritenum = v->spritenum; + u->cur_image = v->GetImage(DIR_W, EIT_PURCHASE); + u->image_width = v->GetDisplayImageWidth(); + } + } + delete t; + } + } + } +} + extern const ChunkHandler _template_vehicle_chunk_handlers[] = { {'TMPL', Save_TMPLS, Load_TMPLS, Ptrs_TMPLS, NULL, CH_ARRAY | CH_LAST}, }; diff --git a/src/tbtr_template_vehicle.h b/src/tbtr_template_vehicle.h index 0631f85b8d..e4331a1f5a 100644 --- a/src/tbtr_template_vehicle.h +++ b/src/tbtr_template_vehicle.h @@ -92,7 +92,6 @@ public: byte spritenum; SpriteID cur_image; uint32 image_width; - const SpriteGroup *sgroup; TemplateVehicle(VehicleType type = VEH_INVALID, EngineID e = INVALID_ENGINE, byte B = 0, Owner = _local_company); TemplateVehicle(EngineID, RailVehicleInfo*); diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 968a23569a..477c30e10f 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -810,8 +810,7 @@ inline void SetupTemplateVehicleFromVirtual(TemplateVehicle *tmp, TemplateVehicl tmp->spritenum = virt->spritenum; tmp->cur_image = virt->GetImage(DIR_W, EIT_PURCHASE); - Point *p = new Point(); - tmp->image_width = virt->GetDisplayImageWidth(p); + tmp->image_width = virt->GetDisplayImageWidth(); } /**