TBTR: Savegame and API changes to support multiple sprites per vehicle.
This commit is contained in:
@@ -45,7 +45,7 @@ std::vector<uint32> _sl_xv_discardable_chunk_ids; ///< list of chunks
|
|||||||
static const uint32 _sl_xv_slxi_chunk_version = 0; ///< current version os SLXI chunk
|
static const uint32 _sl_xv_slxi_chunk_version = 0; ///< current version os SLXI chunk
|
||||||
|
|
||||||
const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
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
|
{ XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -38,7 +38,9 @@ const SaveLoad* GTD() {
|
|||||||
SLE_VAR(TemplateVehicle, max_te, SLE_UINT32),
|
SLE_VAR(TemplateVehicle, max_te, SLE_UINT32),
|
||||||
|
|
||||||
SLE_VAR(TemplateVehicle, spritenum, SLE_UINT8),
|
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_VAR(TemplateVehicle, image_width, SLE_UINT32),
|
||||||
|
|
||||||
SLE_END()
|
SLE_END()
|
||||||
@@ -123,7 +125,7 @@ void AfterLoadTemplateVehiclesUpdateImage()
|
|||||||
Train *v = t;
|
Train *v = t;
|
||||||
for (TemplateVehicle *u = tv; u != NULL; u = u->Next(), v = v->Next()) {
|
for (TemplateVehicle *u = tv; u != NULL; u = u->Next(), v = v->Next()) {
|
||||||
u->spritenum = v->spritenum;
|
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();
|
u->image_width = v->GetDisplayImageWidth();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -64,7 +64,7 @@ TemplateVehicle::TemplateVehicle(VehicleType ty, EngineID eid, byte subtypeflag,
|
|||||||
this->previous = 0x0;
|
this->previous = 0x0;
|
||||||
this->owner_b = _current_company;
|
this->owner_b = _current_company;
|
||||||
|
|
||||||
this->cur_image = SPR_IMG_QUERY;
|
this->sprite_seq.Set(SPR_IMG_QUERY);
|
||||||
|
|
||||||
this->owner = current_owner;
|
this->owner = current_owner;
|
||||||
|
|
||||||
|
@@ -90,7 +90,7 @@ public:
|
|||||||
uint32 max_te;
|
uint32 max_te;
|
||||||
|
|
||||||
byte spritenum;
|
byte spritenum;
|
||||||
SpriteID cur_image;
|
VehicleSpriteSeq sprite_seq; ///< Vehicle appearance.
|
||||||
uint32 image_width;
|
uint32 image_width;
|
||||||
|
|
||||||
TemplateVehicle(VehicleType type = VEH_INVALID, EngineID e = INVALID_ENGINE, byte B = 0, Owner = _local_company);
|
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->reuse_depot_vehicles = true;
|
||||||
this->keep_remaining_vehicles = true;
|
this->keep_remaining_vehicles = true;
|
||||||
this->refit_as_template = true;
|
this->refit_as_template = true;
|
||||||
|
this->sprite_seq.count = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
~TemplateVehicle();
|
~TemplateVehicle();
|
||||||
|
@@ -132,7 +132,7 @@ void DrawTemplate(const TemplateVehicle *tv, int left, int right, int y)
|
|||||||
|
|
||||||
while (t) {
|
while (t) {
|
||||||
PaletteID pal = GetEnginePalette(t->engine_type, _current_company);
|
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;
|
offset += t->image_width;
|
||||||
t = t->Next();
|
t = t->Next();
|
||||||
@@ -167,7 +167,7 @@ inline void SetupTemplateVehicleFromVirtual(TemplateVehicle *tmp, TemplateVehicl
|
|||||||
tmp->max_te = gcache->cached_max_te / 1000;
|
tmp->max_te = gcache->cached_max_te / 1000;
|
||||||
|
|
||||||
tmp->spritenum = virt->spritenum;
|
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();
|
Point *p = new Point();
|
||||||
tmp->image_width = virt->GetDisplayImageWidth(p);
|
tmp->image_width = virt->GetDisplayImageWidth(p);
|
||||||
}
|
}
|
||||||
|
@@ -4124,7 +4124,7 @@ Train* CmdBuildVirtualRailWagon(const Engine *e)
|
|||||||
v->railtype = rvi->railtype;
|
v->railtype = rvi->railtype;
|
||||||
|
|
||||||
v->build_year = _cur_year;
|
v->build_year = _cur_year;
|
||||||
v->cur_image = SPR_IMG_QUERY;
|
v->sprite_seq.Set(SPR_IMG_QUERY);
|
||||||
v->random_bits = VehicleRandomBits();
|
v->random_bits = VehicleRandomBits();
|
||||||
|
|
||||||
v->group_id = DEFAULT_GROUP;
|
v->group_id = DEFAULT_GROUP;
|
||||||
@@ -4200,7 +4200,7 @@ Train* CmdBuildVirtualRailVehicle(EngineID eid, bool lax_engine_check, StringID
|
|||||||
v->railtype = rvi->railtype;
|
v->railtype = rvi->railtype;
|
||||||
_new_vehicle_id = v->index;
|
_new_vehicle_id = v->index;
|
||||||
|
|
||||||
v->cur_image = SPR_IMG_QUERY;
|
v->sprite_seq.Set(SPR_IMG_QUERY);
|
||||||
v->random_bits = VehicleRandomBits();
|
v->random_bits = VehicleRandomBits();
|
||||||
|
|
||||||
v->group_id = DEFAULT_GROUP;
|
v->group_id = DEFAULT_GROUP;
|
||||||
|
@@ -809,7 +809,7 @@ inline void SetupTemplateVehicleFromVirtual(TemplateVehicle *tmp, TemplateVehicl
|
|||||||
tmp->max_te = gcache->cached_max_te / 1000;
|
tmp->max_te = gcache->cached_max_te / 1000;
|
||||||
|
|
||||||
tmp->spritenum = virt->spritenum;
|
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();
|
tmp->image_width = virt->GetDisplayImageWidth();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user