2 * This file is part of OpenTTD.
3 * 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.
4 * 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.
5 * 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 /** @file signs_sl.cpp Code handling saving and loading of economy data */
10 #include "../stdafx.h"
13 #include "compat/signs_sl_compat.h"
15 #include "../signs_base.h"
18 #include "../safeguards.h"
20 /** Description of a sign within the savegame. */
21 static const SaveLoad _sign_desc
[] = {
22 SLE_CONDVAR(Sign
, name
, SLE_NAME
, SL_MIN_VERSION
, SLV_84
),
23 SLE_CONDSSTR(Sign
, name
, SLE_STR
| SLF_ALLOW_CONTROL
, SLV_84
, SL_MAX_VERSION
),
24 SLE_CONDVAR(Sign
, x
, SLE_FILE_I16
| SLE_VAR_I32
, SL_MIN_VERSION
, SLV_5
),
25 SLE_CONDVAR(Sign
, y
, SLE_FILE_I16
| SLE_VAR_I32
, SL_MIN_VERSION
, SLV_5
),
26 SLE_CONDVAR(Sign
, x
, SLE_INT32
, SLV_5
, SL_MAX_VERSION
),
27 SLE_CONDVAR(Sign
, y
, SLE_INT32
, SLV_5
, SL_MAX_VERSION
),
28 SLE_CONDVAR(Sign
, owner
, SLE_UINT8
, SLV_6
, SL_MAX_VERSION
),
29 SLE_CONDVAR(Sign
, z
, SLE_FILE_U8
| SLE_VAR_I32
, SL_MIN_VERSION
, SLV_164
),
30 SLE_CONDVAR(Sign
, z
, SLE_INT32
, SLV_164
, SL_MAX_VERSION
),
33 struct SIGNChunkHandler
: ChunkHandler
{
34 SIGNChunkHandler() : ChunkHandler('SIGN', CH_TABLE
) {}
36 void Save() const override
38 SlTableHeader(_sign_desc
);
40 for (Sign
*si
: Sign::Iterate()) {
41 SlSetArrayIndex(si
->index
);
42 SlObject(si
, _sign_desc
);
46 void Load() const override
48 const std::vector
<SaveLoad
> slt
= SlCompatTableHeader(_sign_desc
, _sign_sl_compat
);
51 while ((index
= SlIterateArray()) != -1) {
52 Sign
*si
= new (index
) Sign();
54 /* Before version 6.1, signs didn't have owner.
55 * Before version 83, invalid signs were determined by si->str == 0.
56 * Before version 103, owner could be a bankrupted company.
57 * - we can't use IsValidCompany() now, so this is fixed in AfterLoadGame()
58 * All signs that were saved are valid (including those with just 'Sign' and INVALID_OWNER).
59 * - so set owner to OWNER_NONE if needed (signs from pre-version 6.1 would be lost) */
60 if (IsSavegameVersionBefore(SLV_6
, 1) || (IsSavegameVersionBefore(SLV_83
) && si
->owner
== INVALID_OWNER
)) {
61 si
->owner
= OWNER_NONE
;
64 /* Signs placed in scenario editor shall now be OWNER_DEITY */
65 if (IsSavegameVersionBefore(SLV_171
) && si
->owner
== OWNER_NONE
&& _file_to_saveload
.abstract_ftype
== FT_SCENARIO
) {
66 si
->owner
= OWNER_DEITY
;
72 static const SIGNChunkHandler SIGN
;
73 static const ChunkHandlerRef sign_chunk_handlers
[] = {
77 extern const ChunkHandlerTable
_sign_chunk_handlers(sign_chunk_handlers
);