From 92254acf8de153077bf0d9a15c5268abe81d36dd Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 1 Nov 2016 20:27:30 +0000 Subject: [PATCH] TBTR: Savegame and API changes to support multiple sprites per vehicle. --- src/saveload/extended_ver_sl.cpp | 2 +- src/saveload/tbtr_template_veh_sl.cpp | 6 ++++-- src/tbtr_template_vehicle.cpp | 2 +- src/tbtr_template_vehicle.h | 3 ++- src/tbtr_template_vehicle_func.cpp | 4 ++-- src/train_cmd.cpp | 4 ++-- src/vehicle_cmd.cpp | 2 +- 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index 18890d44ca..dfc45e58e3 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -45,7 +45,7 @@ std::vector _sl_xv_discardable_chunk_ids; ///< list of chunks static const uint32 _sl_xv_slxi_chunk_version = 0; ///< current version os SLXI chunk const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = { - { XSLFI_TEMPLATE_REPLACEMENT, XSCF_NULL, 1, 1, "template_replacement", NULL, NULL, "TRPL,TMPL" }, + { XSLFI_TEMPLATE_REPLACEMENT, XSCF_NULL, 2, 2, "template_replacement", NULL, NULL, "TRPL,TMPL" }, { XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker }; diff --git a/src/saveload/tbtr_template_veh_sl.cpp b/src/saveload/tbtr_template_veh_sl.cpp index 32dd9e104c..f17607401e 100644 --- a/src/saveload/tbtr_template_veh_sl.cpp +++ b/src/saveload/tbtr_template_veh_sl.cpp @@ -38,7 +38,9 @@ const SaveLoad* GTD() { SLE_VAR(TemplateVehicle, max_te, SLE_UINT32), SLE_VAR(TemplateVehicle, spritenum, SLE_UINT8), - SLE_VAR(TemplateVehicle, cur_image, SLE_UINT32), + SLE_CONDVAR_X(TemplateVehicle, sprite_seq.seq[0].sprite, SLE_UINT32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 1)), + SLE_CONDVAR_X(TemplateVehicle, sprite_seq.count, SLE_UINT32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 2)), + SLE_CONDARR_X(TemplateVehicle, sprite_seq.seq, SLE_UINT32, 8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 2)), SLE_VAR(TemplateVehicle, image_width, SLE_UINT32), SLE_END() @@ -123,7 +125,7 @@ void AfterLoadTemplateVehiclesUpdateImage() 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); + v->GetImage(DIR_W, EIT_PURCHASE, &u->sprite_seq); u->image_width = v->GetDisplayImageWidth(); } } diff --git a/src/tbtr_template_vehicle.cpp b/src/tbtr_template_vehicle.cpp index 001d36f8ad..d0310b0495 100644 --- a/src/tbtr_template_vehicle.cpp +++ b/src/tbtr_template_vehicle.cpp @@ -64,7 +64,7 @@ TemplateVehicle::TemplateVehicle(VehicleType ty, EngineID eid, byte subtypeflag, this->previous = 0x0; this->owner_b = _current_company; - this->cur_image = SPR_IMG_QUERY; + this->sprite_seq.Set(SPR_IMG_QUERY); this->owner = current_owner; diff --git a/src/tbtr_template_vehicle.h b/src/tbtr_template_vehicle.h index 82a655a676..760ef88ef8 100644 --- a/src/tbtr_template_vehicle.h +++ b/src/tbtr_template_vehicle.h @@ -90,7 +90,7 @@ public: uint32 max_te; byte spritenum; - SpriteID cur_image; + VehicleSpriteSeq sprite_seq; ///< Vehicle appearance. uint32 image_width; TemplateVehicle(VehicleType type = VEH_INVALID, EngineID e = INVALID_ENGINE, byte B = 0, Owner = _local_company); @@ -105,6 +105,7 @@ public: this->reuse_depot_vehicles = true; this->keep_remaining_vehicles = true; this->refit_as_template = true; + this->sprite_seq.count = 1; } ~TemplateVehicle(); diff --git a/src/tbtr_template_vehicle_func.cpp b/src/tbtr_template_vehicle_func.cpp index 43eb279663..c68d9be2e5 100644 --- a/src/tbtr_template_vehicle_func.cpp +++ b/src/tbtr_template_vehicle_func.cpp @@ -132,7 +132,7 @@ void DrawTemplate(const TemplateVehicle *tv, int left, int right, int y) while (t) { PaletteID pal = GetEnginePalette(t->engine_type, _current_company); - DrawSprite(t->cur_image, pal, offset + t->image_width / 2, ScaleGUITrad(11)); + t->sprite_seq.Draw(offset + t->image_width / 2, ScaleGUITrad(11), pal, false); offset += t->image_width; t = t->Next(); @@ -167,7 +167,7 @@ inline void SetupTemplateVehicleFromVirtual(TemplateVehicle *tmp, TemplateVehicl tmp->max_te = gcache->cached_max_te / 1000; tmp->spritenum = virt->spritenum; - tmp->cur_image = virt->GetImage(DIR_W, EIT_PURCHASE); + virt->GetImage(DIR_W, EIT_PURCHASE, &tmp->sprite_seq); Point *p = new Point(); tmp->image_width = virt->GetDisplayImageWidth(p); } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 4832083e7c..a4f03e8985 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -4124,7 +4124,7 @@ Train* CmdBuildVirtualRailWagon(const Engine *e) v->railtype = rvi->railtype; v->build_year = _cur_year; - v->cur_image = SPR_IMG_QUERY; + v->sprite_seq.Set(SPR_IMG_QUERY); v->random_bits = VehicleRandomBits(); v->group_id = DEFAULT_GROUP; @@ -4200,7 +4200,7 @@ Train* CmdBuildVirtualRailVehicle(EngineID eid, bool lax_engine_check, StringID v->railtype = rvi->railtype; _new_vehicle_id = v->index; - v->cur_image = SPR_IMG_QUERY; + v->sprite_seq.Set(SPR_IMG_QUERY); v->random_bits = VehicleRandomBits(); v->group_id = DEFAULT_GROUP; diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index c430c24ff1..eca4daad08 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -809,7 +809,7 @@ inline void SetupTemplateVehicleFromVirtual(TemplateVehicle *tmp, TemplateVehicl tmp->max_te = gcache->cached_max_te / 1000; tmp->spritenum = virt->spritenum; - tmp->cur_image = virt->GetImage(DIR_W, EIT_PURCHASE); + virt->GetImage(DIR_W, EIT_PURCHASE, &tmp->sprite_seq); tmp->image_width = virt->GetDisplayImageWidth(); }