(svn r27770) -Fix [FS#6540]: Initialize variables in station_sl.cpp (JGR)
[openttd.git] / src / saveload / industry_sl.cpp
blobc5ddadfdd0b6d1f0a1724bd9611b207526e726ad
1 /* $Id$ */
3 /*
4 * This file is part of OpenTTD.
5 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
6 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
8 */
10 /** @file industry_sl.cpp Code handling saving and loading of industries */
12 #include "../stdafx.h"
13 #include "../industry.h"
15 #include "saveload.h"
16 #include "newgrf_sl.h"
18 #include "../safeguards.h"
20 static OldPersistentStorage _old_ind_persistent_storage;
22 static const SaveLoad _industry_desc[] = {
23 SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
24 SLE_CONDVAR(Industry, location.tile, SLE_UINT32, 6, SL_MAX_VERSION),
25 SLE_VAR(Industry, location.w, SLE_FILE_U8 | SLE_VAR_U16),
26 SLE_VAR(Industry, location.h, SLE_FILE_U8 | SLE_VAR_U16),
27 SLE_REF(Industry, town, REF_TOWN),
28 SLE_CONDNULL( 2, 0, 60), ///< used to be industry's produced_cargo
29 SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, 78, SL_MAX_VERSION),
30 SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, 70, SL_MAX_VERSION),
31 SLE_ARR(Industry, produced_cargo_waiting, SLE_UINT16, 2),
32 SLE_ARR(Industry, production_rate, SLE_UINT8, 2),
33 SLE_CONDNULL( 3, 0, 60), ///< used to be industry's accepts_cargo
34 SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, 78, SL_MAX_VERSION),
35 SLE_VAR(Industry, prod_level, SLE_UINT8),
36 SLE_ARR(Industry, this_month_production, SLE_UINT16, 2),
37 SLE_ARR(Industry, this_month_transported, SLE_UINT16, 2),
38 SLE_ARR(Industry, last_month_pct_transported, SLE_UINT8, 2),
39 SLE_ARR(Industry, last_month_production, SLE_UINT16, 2),
40 SLE_ARR(Industry, last_month_transported, SLE_UINT16, 2),
42 SLE_VAR(Industry, counter, SLE_UINT16),
44 SLE_VAR(Industry, type, SLE_UINT8),
45 SLE_VAR(Industry, owner, SLE_UINT8),
46 SLE_VAR(Industry, random_colour, SLE_UINT8),
47 SLE_CONDVAR(Industry, last_prod_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30),
48 SLE_CONDVAR(Industry, last_prod_year, SLE_INT32, 31, SL_MAX_VERSION),
49 SLE_VAR(Industry, was_cargo_delivered, SLE_UINT8),
51 SLE_CONDVAR(Industry, founder, SLE_UINT8, 70, SL_MAX_VERSION),
52 SLE_CONDVAR(Industry, construction_date, SLE_INT32, 70, SL_MAX_VERSION),
53 SLE_CONDVAR(Industry, construction_type, SLE_UINT8, 70, SL_MAX_VERSION),
54 SLE_CONDVAR(Industry, last_cargo_accepted_at, SLE_INT32, 70, SL_MAX_VERSION),
55 SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, 73, SL_MAX_VERSION),
57 SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, 76, 160),
58 SLE_CONDREF(Industry, psa, REF_STORAGE, 161, SL_MAX_VERSION),
60 SLE_CONDVAR(Industry, random_triggers, SLE_UINT8, 82, SL_MAX_VERSION),
61 SLE_CONDVAR(Industry, random, SLE_UINT16, 82, SL_MAX_VERSION),
63 SLE_CONDNULL(32, 2, 143), // old reserved space
65 SLE_END()
68 static void Save_INDY()
70 Industry *ind;
72 /* Write the industries */
73 FOR_ALL_INDUSTRIES(ind) {
74 SlSetArrayIndex(ind->index);
75 SlObject(ind, _industry_desc);
79 static void Save_IIDS()
81 Save_NewGRFMapping(_industry_mngr);
84 static void Save_TIDS()
86 Save_NewGRFMapping(_industile_mngr);
89 static void Load_INDY()
91 int index;
93 Industry::ResetIndustryCounts();
95 while ((index = SlIterateArray()) != -1) {
96 Industry *i = new (index) Industry();
97 SlObject(i, _industry_desc);
99 /* Before savegame version 161, persistent storages were not stored in a pool. */
100 if (IsSavegameVersionBefore(161) && !IsSavegameVersionBefore(76)) {
101 /* Store the old persistent storage. The GRFID will be added later. */
102 assert(PersistentStorage::CanAllocateItem());
103 i->psa = new PersistentStorage(0, 0, 0);
104 memcpy(i->psa->storage, _old_ind_persistent_storage.storage, sizeof(i->psa->storage));
106 Industry::IncIndustryTypeCount(i->type);
110 static void Load_IIDS()
112 Load_NewGRFMapping(_industry_mngr);
115 static void Load_TIDS()
117 Load_NewGRFMapping(_industile_mngr);
120 static void Ptrs_INDY()
122 Industry *i;
124 FOR_ALL_INDUSTRIES(i) {
125 SlObject(i, _industry_desc);
129 /** Description of the data to save and load in #IndustryBuildData. */
130 static const SaveLoad _industry_builder_desc[] = {
131 SLEG_VAR(_industry_builder.wanted_inds, SLE_UINT32),
132 SLEG_END()
135 /** Load/save industry builder. */
136 static void LoadSave_IBLD()
138 SlGlobList(_industry_builder_desc);
141 /** Description of the data to save and load in #IndustryTypeBuildData. */
142 static const SaveLoad _industrytype_builder_desc[] = {
143 SLE_VAR(IndustryTypeBuildData, probability, SLE_UINT32),
144 SLE_VAR(IndustryTypeBuildData, min_number, SLE_UINT8),
145 SLE_VAR(IndustryTypeBuildData, target_count, SLE_UINT16),
146 SLE_VAR(IndustryTypeBuildData, max_wait, SLE_UINT16),
147 SLE_VAR(IndustryTypeBuildData, wait_count, SLE_UINT16),
148 SLE_END()
151 /** Save industry-type build data. */
152 static void Save_ITBL()
154 for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
155 SlSetArrayIndex(i);
156 SlObject(_industry_builder.builddata + i, _industrytype_builder_desc);
160 /** Load industry-type build data. */
161 static void Load_ITBL()
163 for (IndustryType it = 0; it < NUM_INDUSTRYTYPES; it++) {
164 _industry_builder.builddata[it].Reset();
166 int index;
167 while ((index = SlIterateArray()) != -1) {
168 if ((uint)index >= NUM_INDUSTRYTYPES) SlErrorCorrupt("Too many industry builder datas");
169 SlObject(_industry_builder.builddata + index, _industrytype_builder_desc);
173 extern const ChunkHandler _industry_chunk_handlers[] = {
174 { 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, NULL, CH_ARRAY},
175 { 'IIDS', Save_IIDS, Load_IIDS, NULL, NULL, CH_ARRAY},
176 { 'TIDS', Save_TIDS, Load_TIDS, NULL, NULL, CH_ARRAY},
177 { 'IBLD', LoadSave_IBLD, LoadSave_IBLD, NULL, NULL, CH_RIFF},
178 { 'ITBL', Save_ITBL, Load_ITBL, NULL, NULL, CH_ARRAY | CH_LAST},