00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #include "../stdafx.h"
00013 #include "../industry.h"
00014
00015 #include "saveload.h"
00016 #include "newgrf_sl.h"
00017
00018 static const SaveLoad _industry_desc[] = {
00019 SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
00020 SLE_CONDVAR(Industry, location.tile, SLE_UINT32, 6, SL_MAX_VERSION),
00021 SLE_VAR(Industry, location.w, SLE_FILE_U8 | SLE_VAR_U16),
00022 SLE_VAR(Industry, location.h, SLE_FILE_U8 | SLE_VAR_U16),
00023 SLE_REF(Industry, town, REF_TOWN),
00024 SLE_CONDNULL( 2, 0, 60),
00025 SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, 78, SL_MAX_VERSION),
00026 SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, 70, SL_MAX_VERSION),
00027 SLE_ARR(Industry, produced_cargo_waiting, SLE_UINT16, 2),
00028 SLE_ARR(Industry, production_rate, SLE_UINT8, 2),
00029 SLE_CONDNULL( 3, 0, 60),
00030 SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, 78, SL_MAX_VERSION),
00031 SLE_CONDVAR(Industry, produced_accepted_mask, SLE_UINT32, 161, SL_MAX_VERSION),
00032 SLE_VAR(Industry, prod_level, SLE_UINT8),
00033 SLE_ARR(Industry, this_month_production, SLE_UINT16, 2),
00034 SLE_ARR(Industry, this_month_transported, SLE_UINT16, 2),
00035 SLE_ARR(Industry, last_month_pct_transported, SLE_UINT8, 2),
00036 SLE_ARR(Industry, last_month_production, SLE_UINT16, 2),
00037 SLE_ARR(Industry, last_month_transported, SLE_UINT16, 2),
00038 SLE_CONDARR(Industry, average_production, SLE_UINT16, 2, 161, SL_MAX_VERSION),
00039
00040 SLE_VAR(Industry, counter, SLE_UINT16),
00041
00042 SLE_VAR(Industry, type, SLE_UINT8),
00043 SLE_VAR(Industry, owner, SLE_UINT8),
00044 SLE_VAR(Industry, random_colour, SLE_UINT8),
00045 SLE_CONDVAR(Industry, last_prod_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30),
00046 SLE_CONDVAR(Industry, last_prod_year, SLE_INT32, 31, SL_MAX_VERSION),
00047 SLE_VAR(Industry, was_cargo_delivered, SLE_UINT8),
00048
00049 SLE_CONDVAR(Industry, founder, SLE_UINT8, 70, SL_MAX_VERSION),
00050 SLE_CONDVAR(Industry, construction_date, SLE_INT32, 70, SL_MAX_VERSION),
00051 SLE_CONDVAR(Industry, construction_type, SLE_UINT8, 70, SL_MAX_VERSION),
00052 SLE_CONDVAR(Industry, last_cargo_accepted_at, SLE_INT32, 70, SL_MAX_VERSION),
00053 SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, 73, SL_MAX_VERSION),
00054
00055 SLE_CONDARR(Industry, psa.storage, SLE_UINT32, 16, 76, SL_MAX_VERSION),
00056
00057 SLE_CONDVAR(Industry, random_triggers, SLE_UINT8, 82, SL_MAX_VERSION),
00058 SLE_CONDVAR(Industry, random, SLE_UINT16, 82, SL_MAX_VERSION),
00059
00060 SLE_CONDNULL(32, 2, 143),
00061
00062 SLE_END()
00063 };
00064
00065 static void RealSave_INDY(Industry *ind)
00066 {
00067 SlObject(ind, _industry_desc);
00068 ind->SaveCargoSourceSink();
00069 }
00070
00071 static void Save_INDY()
00072 {
00073 Industry *ind;
00074
00075
00076 FOR_ALL_INDUSTRIES(ind) {
00077 SlSetArrayIndex(ind->index);
00078 SlAutolength((AutolengthProc *)RealSave_INDY, ind);
00079 }
00080 }
00081
00082 static void Save_IIDS()
00083 {
00084 Save_NewGRFMapping(_industry_mngr);
00085 }
00086
00087 static void Save_TIDS()
00088 {
00089 Save_NewGRFMapping(_industile_mngr);
00090 }
00091
00092 static void Load_INDY()
00093 {
00094 int index;
00095
00096 Industry::ResetIndustryCounts();
00097
00098 while ((index = SlIterateArray()) != -1) {
00099 Industry *i = new (index) Industry();
00100 SlObject(i, _industry_desc);
00101 i->LoadCargoSourceSink();
00102 Industry::IncIndustryTypeCount(i->type);
00103 }
00104 }
00105
00106 static void Load_IIDS()
00107 {
00108 Load_NewGRFMapping(_industry_mngr);
00109 }
00110
00111 static void Load_TIDS()
00112 {
00113 Load_NewGRFMapping(_industile_mngr);
00114 }
00115
00116 static void Ptrs_INDY()
00117 {
00118 Industry *i;
00119
00120 FOR_ALL_INDUSTRIES(i) {
00121 SlObject(i, _industry_desc);
00122 i->PtrsCargoSourceSink();
00123 }
00124 }
00125
00127 static const SaveLoad _industry_builder_desc[] = {
00128 SLEG_VAR(_industry_builder.wanted_inds, SLE_UINT32),
00129 SLEG_END()
00130 };
00131
00133 static void LoadSave_IBLD()
00134 {
00135 SlGlobList(_industry_builder_desc);
00136 }
00137
00139 static const SaveLoad _industrytype_builder_desc[] = {
00140 SLE_VAR(IndustryTypeBuildData, probability, SLE_UINT32),
00141 SLE_VAR(IndustryTypeBuildData, min_number, SLE_UINT8),
00142 SLE_VAR(IndustryTypeBuildData, target_count, SLE_UINT16),
00143 SLE_VAR(IndustryTypeBuildData, max_wait, SLE_UINT16),
00144 SLE_VAR(IndustryTypeBuildData, wait_count, SLE_UINT16),
00145 SLE_END()
00146 };
00147
00149 static void Save_ITBL()
00150 {
00151 for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
00152 SlSetArrayIndex(i);
00153 SlObject(_industry_builder.builddata + i, _industrytype_builder_desc);
00154 }
00155 }
00156
00158 static void Load_ITBL()
00159 {
00160 int index;
00161 for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
00162 index = SlIterateArray();
00163 assert(index == i);
00164 SlObject(_industry_builder.builddata + i, _industrytype_builder_desc);
00165 }
00166 index = SlIterateArray();
00167 assert(index == -1);
00168 }
00169
00170 extern const ChunkHandler _industry_chunk_handlers[] = {
00171 { 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, NULL, CH_ARRAY},
00172 { 'IIDS', Save_IIDS, Load_IIDS, NULL, NULL, CH_ARRAY},
00173 { 'TIDS', Save_TIDS, Load_TIDS, NULL, NULL, CH_ARRAY},
00174 { 'IBLD', LoadSave_IBLD, LoadSave_IBLD, NULL, NULL, CH_RIFF},
00175 { 'ITBL', Save_ITBL, Load_ITBL, NULL, NULL, CH_ARRAY | CH_LAST},
00176 };