diff --git a/src/order_base.h b/src/order_base.h index d3b885da98..c8fa59c727 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -45,6 +45,8 @@ private: friend const struct SaveLoad *GetOrderDescription(); ///< Saving and loading of orders. friend void Load_ORDX(); ///< Saving and loading of orders. friend void Save_ORDX(); ///< Saving and loading of orders. + friend void Load_VEOX(); ///< Saving and loading of orders. + friend void Save_VEOX(); ///< Saving and loading of orders. uint8 type; ///< The type of order + non-stop flags uint8 flags; ///< Load/unload types, depot order/action types. diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index cd2a2eff3a..ec1232db69 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -70,7 +70,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = { { XSLFI_LINKGRAPH_DAY_SCALE, XSCF_NULL, 1, 1, "linkgraph_day_scale", NULL, NULL, NULL }, { XSLFI_TEMPLATE_REPLACEMENT, XSCF_NULL, 1, 1, "template_replacement", NULL, NULL, "TRPL,TMPL" }, { XSLFI_MORE_RAIL_TYPES, XSCF_NULL, 1, 1, "more_rail_types", NULL, NULL, NULL }, - { XSLFI_CARGO_TYPE_ORDERS, XSCF_NULL, 1, 1, "cargo_type_orders", NULL, NULL, "ORDX" }, + { XSLFI_CARGO_TYPE_ORDERS, XSCF_NULL, 2, 2, "cargo_type_orders", NULL, NULL, "ORDX,VEOX" }, { XSLFI_EXTENDED_GAMELOG, XSCF_NULL, 1, 1, "extended_gamelog", NULL, NULL, NULL }, { XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index f14aa9b20c..c6300a4ac5 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -978,6 +978,33 @@ static void Ptrs_VEHS() } } +const SaveLoad *GetOrderExtraInfoDescription(); + +void Save_VEOX() +{ + /* save extended order info for vehicle current order */ + Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (v->current_order.extra) { + SlSetArrayIndex(v->index); + SlObject(v->current_order.extra.get(), GetOrderExtraInfoDescription()); + } + } +} + +void Load_VEOX() +{ + /* load extended order info for vehicle current order */ + int index; + while ((index = SlIterateArray()) != -1) { + Vehicle *v = Vehicle::GetIfValid(index); + assert(v != NULL); + v->current_order.AllocExtraInfo(); + SlObject(v->current_order.extra.get(), GetOrderExtraInfoDescription()); + } +} + extern const ChunkHandler _veh_chunk_handlers[] = { - { 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, NULL, CH_SPARSE_ARRAY | CH_LAST}, + { 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, NULL, CH_SPARSE_ARRAY}, + { 'VEOX', Save_VEOX, Load_VEOX, NULL, NULL, CH_SPARSE_ARRAY | CH_LAST}, };