Merge branch 'master' into jgrpp-beta
# Conflicts: # src/saveload/cargopacket_sl.cpp # src/saveload/cheat_sl.cpp # src/saveload/company_sl.cpp # src/saveload/engine_sl.cpp # src/saveload/map_sl.cpp # src/saveload/order_sl.cpp # src/saveload/saveload.cpp # src/saveload/saveload.h # src/saveload/station_sl.cpp # src/saveload/vehicle_sl.cpp # src/settings.cpp # src/settings_gui.cpp # src/settings_internal.h # src/stdafx.h # src/table/settings/settings.ini # src/town_cmd.cpp # src/vehicle.cpp
This commit is contained in:
@@ -120,6 +120,8 @@ static void Save_AIPL()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _ai_chunk_handlers[] = {
|
||||
{ 'AIPL', Save_AIPL, Load_AIPL, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler ai_chunk_handlers[] = {
|
||||
{ 'AIPL', Save_AIPL, Load_AIPL, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _ai_chunk_handlers(ai_chunk_handlers);
|
||||
|
||||
@@ -34,7 +34,9 @@ static void Load_ATID()
|
||||
Load_NewGRFMapping(_airporttile_mngr);
|
||||
}
|
||||
|
||||
extern const ChunkHandler _airport_chunk_handlers[] = {
|
||||
static const ChunkHandler airport_chunk_handlers[] = {
|
||||
{ 'ATID', Save_ATID, Load_ATID, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'APID', Save_APID, Load_APID, nullptr, nullptr, CH_ARRAY | CH_LAST },
|
||||
{ 'APID', Save_APID, Load_APID, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _airport_chunk_handlers(airport_chunk_handlers);
|
||||
|
||||
@@ -73,6 +73,8 @@ static void Load_ANIT()
|
||||
* "Definition" imported by the saveload code to be able to load and save
|
||||
* the animated tile table.
|
||||
*/
|
||||
extern const ChunkHandler _animated_tile_chunk_handlers[] = {
|
||||
{ 'ANIT', Save_ANIT, Load_ANIT, nullptr, nullptr, CH_RIFF | CH_LAST},
|
||||
static const ChunkHandler animated_tile_chunk_handlers[] = {
|
||||
{ 'ANIT', Save_ANIT, Load_ANIT, nullptr, nullptr, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _animated_tile_chunk_handlers(animated_tile_chunk_handlers);
|
||||
|
||||
@@ -55,6 +55,8 @@ static void Ptrs_ERNW()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _autoreplace_chunk_handlers[] = {
|
||||
{ 'ERNW', Save_ERNW, Load_ERNW, Ptrs_ERNW, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler autoreplace_chunk_handlers[] = {
|
||||
{ 'ERNW', Save_ERNW, Load_ERNW, Ptrs_ERNW, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _autoreplace_chunk_handlers(autoreplace_chunk_handlers);
|
||||
|
||||
@@ -50,6 +50,8 @@ static void Save_XBSS()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _bridge_signal_chunk_handlers[] = {
|
||||
{ 'XBSS', Save_XBSS, Load_XBSS, nullptr, nullptr, CH_SPARSE_ARRAY | CH_LAST},
|
||||
extern const ChunkHandler bridge_signal_chunk_handlers[] = {
|
||||
{ 'XBSS', Save_XBSS, Load_XBSS, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _bridge_signal_chunk_handlers(bridge_signal_chunk_handlers);
|
||||
|
||||
@@ -117,7 +117,9 @@ static void LoadPickup()
|
||||
}
|
||||
|
||||
/** Chunk definition of the cargomonitoring maps. */
|
||||
extern const ChunkHandler _cargomonitor_chunk_handlers[] = {
|
||||
{ 'CMDL', SaveDelivery, LoadDelivery, nullptr, nullptr, CH_ARRAY},
|
||||
{ 'CMPU', SavePickup, LoadPickup, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler cargomonitor_chunk_handlers[] = {
|
||||
{ 'CMDL', SaveDelivery, LoadDelivery, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'CMPU', SavePickup, LoadPickup, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _cargomonitor_chunk_handlers(cargomonitor_chunk_handlers);
|
||||
|
||||
@@ -186,7 +186,9 @@ void Load_CPDP()
|
||||
|
||||
|
||||
/** Chunk handlers related to cargo packets. */
|
||||
extern const ChunkHandler _cargopacket_chunk_handlers[] = {
|
||||
static const ChunkHandler cargopacket_chunk_handlers[] = {
|
||||
{ 'CAPA', Save_CAPA, Load_CAPA, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'CPDP', Save_CPDP, Load_CPDP, nullptr, nullptr, CH_RIFF | CH_LAST },
|
||||
{ 'CPDP', Save_CPDP, Load_CPDP, nullptr, nullptr, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _cargopacket_chunk_handlers(cargopacket_chunk_handlers);
|
||||
|
||||
@@ -155,7 +155,9 @@ static const SaveLoad _settings_ext_save_desc[] = {
|
||||
|
||||
|
||||
/** Chunk handlers related to cheats. */
|
||||
extern const ChunkHandler _cheat_chunk_handlers[] = {
|
||||
{ 'CHTS', Save_CHTS, Load_CHTS, nullptr, nullptr, CH_RIFF},
|
||||
{ 'CHTX', Save_CHTX, Load_CHTX, nullptr, nullptr, CH_RIFF | CH_LAST},
|
||||
static const ChunkHandler cheat_chunk_handlers[] = {
|
||||
{ 'CHTS', Save_CHTS, Load_CHTS, nullptr, nullptr, CH_RIFF },
|
||||
{ 'CHTX', Save_CHTX, Load_CHTX, nullptr, nullptr, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _cheat_chunk_handlers(cheat_chunk_handlers);
|
||||
|
||||
@@ -556,7 +556,9 @@ static void Save_PLYX()
|
||||
SaveSettingsPlyx();
|
||||
}
|
||||
|
||||
extern const ChunkHandler _company_chunk_handlers[] = {
|
||||
static const ChunkHandler company_chunk_handlers[] = {
|
||||
{ 'PLYR', Save_PLYR, Load_PLYR, Ptrs_PLYR, Check_PLYR, CH_ARRAY },
|
||||
{ 'PLYX', Save_PLYX, Load_PLYX, nullptr, Check_PLYX, CH_RIFF | CH_LAST},
|
||||
{ 'PLYX', Save_PLYX, Load_PLYX, nullptr, Check_PLYX, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _company_chunk_handlers(company_chunk_handlers);
|
||||
|
||||
@@ -86,7 +86,9 @@ static void Check_DBGC()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _debug_chunk_handlers[] = {
|
||||
{ 'DBGL', Save_DBGL, Load_DBGL, nullptr, Check_DBGL, CH_RIFF},
|
||||
{ 'DBGC', Save_DBGC, Load_DBGC, nullptr, Check_DBGC, CH_RIFF | CH_LAST},
|
||||
extern const ChunkHandler debug_chunk_handlers[] = {
|
||||
{ 'DBGL', Save_DBGL, Load_DBGL, nullptr, Check_DBGL, CH_RIFF },
|
||||
{ 'DBGC', Save_DBGC, Load_DBGC, nullptr, Check_DBGC, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _debug_chunk_handlers(debug_chunk_handlers);
|
||||
|
||||
@@ -57,6 +57,8 @@ static void Ptrs_DEPT()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _depot_chunk_handlers[] = {
|
||||
{ 'DEPT', Save_DEPT, Load_DEPT, Ptrs_DEPT, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler depot_chunk_handlers[] = {
|
||||
{ 'DEPT', Save_DEPT, Load_DEPT, Ptrs_DEPT, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _depot_chunk_handlers(depot_chunk_handlers);
|
||||
|
||||
@@ -95,9 +95,11 @@ static void Ptrs_CAPY()
|
||||
}
|
||||
|
||||
|
||||
extern const ChunkHandler _economy_chunk_handlers[] = {
|
||||
{ 'CAPY', Save_CAPY, Load_CAPY, Ptrs_CAPY, nullptr, CH_ARRAY},
|
||||
{ 'PRIC', nullptr, Load_PRIC, nullptr, nullptr, CH_RIFF },
|
||||
{ 'CAPR', nullptr, Load_CAPR, nullptr, nullptr, CH_RIFF },
|
||||
{ 'ECMY', Save_ECMY, Load_ECMY, nullptr, nullptr, CH_RIFF | CH_LAST},
|
||||
static const ChunkHandler economy_chunk_handlers[] = {
|
||||
{ 'CAPY', Save_CAPY, Load_CAPY, Ptrs_CAPY, nullptr, CH_ARRAY },
|
||||
{ 'PRIC', nullptr, Load_PRIC, nullptr, nullptr, CH_RIFF },
|
||||
{ 'CAPR', nullptr, Load_CAPR, nullptr, nullptr, CH_RIFF },
|
||||
{ 'ECMY', Save_ECMY, Load_ECMY, nullptr, nullptr, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _economy_chunk_handlers(economy_chunk_handlers);
|
||||
|
||||
@@ -199,8 +199,10 @@ void AfterLoadEngines()
|
||||
AnalyseEngineCallbacks();
|
||||
}
|
||||
|
||||
extern const ChunkHandler _engine_chunk_handlers[] = {
|
||||
{ 'EIDS', Save_EIDS, Load_EIDS, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'ENGN', Save_ENGN, Load_ENGN, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'ENGS', nullptr, Load_ENGS, nullptr, nullptr, CH_RIFF | CH_LAST },
|
||||
static const ChunkHandler engine_chunk_handlers[] = {
|
||||
{ 'EIDS', Save_EIDS, Load_EIDS, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'ENGN', Save_ENGN, Load_ENGN, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'ENGS', nullptr, Load_ENGS, nullptr, nullptr, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _engine_chunk_handlers(engine_chunk_handlers);
|
||||
|
||||
@@ -669,6 +669,7 @@ static uint32 saveLC(const SlxiSubChunkInfo *info, bool dry_run)
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern const ChunkHandler _version_ext_chunk_handlers[] = {
|
||||
{ 'SLXI', Save_SLXI, Load_SLXI, nullptr, Load_SLXI, CH_RIFF | CH_LAST},
|
||||
extern const ChunkHandler version_ext_chunk_handlers[] = {
|
||||
{ 'SLXI', Save_SLXI, Load_SLXI, nullptr, Load_SLXI, CH_RIFF },
|
||||
};
|
||||
extern const ChunkHandlerTable _version_ext_chunk_handlers(version_ext_chunk_handlers);
|
||||
|
||||
@@ -173,7 +173,9 @@ static void Save_GSTR()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _game_chunk_handlers[] = {
|
||||
static const ChunkHandler game_chunk_handlers[] = {
|
||||
{ 'GSTR', Save_GSTR, Load_GSTR, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'GSDT', Save_GSDT, Load_GSDT, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
{ 'GSDT', Save_GSDT, Load_GSDT, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _game_chunk_handlers(game_chunk_handlers);
|
||||
|
||||
@@ -175,6 +175,8 @@ static void Check_GLOG()
|
||||
Load_GLOG_common(_load_check_data.gamelog_action, _load_check_data.gamelog_actions);
|
||||
}
|
||||
|
||||
extern const ChunkHandler _gamelog_chunk_handlers[] = {
|
||||
{ 'GLOG', Save_GLOG, Load_GLOG, nullptr, Check_GLOG, CH_RIFF | CH_LAST }
|
||||
static const ChunkHandler gamelog_chunk_handlers[] = {
|
||||
{ 'GLOG', Save_GLOG, Load_GLOG, nullptr, Check_GLOG, CH_RIFF }
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _gamelog_chunk_handlers(gamelog_chunk_handlers);
|
||||
|
||||
@@ -40,6 +40,8 @@ static void Load_GOAL()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _goal_chunk_handlers[] = {
|
||||
{ 'GOAL', Save_GOAL, Load_GOAL, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler goal_chunk_handlers[] = {
|
||||
{ 'GOAL', Save_GOAL, Load_GOAL, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _goal_chunk_handlers(goal_chunk_handlers);
|
||||
|
||||
@@ -55,6 +55,8 @@ static void Load_GRPS()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _group_chunk_handlers[] = {
|
||||
{ 'GRPS', Save_GRPS, Load_GRPS, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler group_chunk_handlers[] = {
|
||||
{ 'GRPS', Save_GRPS, Load_GRPS, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _group_chunk_handlers(group_chunk_handlers);
|
||||
|
||||
@@ -176,10 +176,12 @@ static void Load_ITBL()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _industry_chunk_handlers[] = {
|
||||
{ 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, nullptr, CH_ARRAY},
|
||||
{ 'IIDS', Save_IIDS, Load_IIDS, nullptr, nullptr, CH_ARRAY},
|
||||
{ 'TIDS', Save_TIDS, Load_TIDS, nullptr, nullptr, CH_ARRAY},
|
||||
{ 'IBLD', LoadSave_IBLD, LoadSave_IBLD, nullptr, nullptr, CH_RIFF},
|
||||
{ 'ITBL', Save_ITBL, Load_ITBL, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler industry_chunk_handlers[] = {
|
||||
{ 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, nullptr, CH_ARRAY },
|
||||
{ 'IIDS', Save_IIDS, Load_IIDS, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'TIDS', Save_TIDS, Load_TIDS, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'IBLD', LoadSave_IBLD, LoadSave_IBLD, nullptr, nullptr, CH_RIFF },
|
||||
{ 'ITBL', Save_ITBL, Load_ITBL, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _industry_chunk_handlers(industry_chunk_handlers);
|
||||
|
||||
@@ -130,7 +130,9 @@ static void Load_RAIL()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _labelmaps_chunk_handlers[] = {
|
||||
{ 'RAIL', Save_RAIL, Load_RAIL, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler labelmaps_chunk_handlers[] = {
|
||||
{ 'RAIL', Save_RAIL, Load_RAIL, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _labelmaps_chunk_handlers(labelmaps_chunk_handlers);
|
||||
|
||||
|
||||
@@ -328,8 +328,10 @@ static void Ptrs_LGRS()
|
||||
SlObject(&LinkGraphSchedule::instance, GetLinkGraphScheduleDesc());
|
||||
}
|
||||
|
||||
extern const ChunkHandler _linkgraph_chunk_handlers[] = {
|
||||
static const ChunkHandler linkgraph_chunk_handlers[] = {
|
||||
{ 'LGRP', Save_LGRP, Load_LGRP, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'LGRJ', Save_LGRJ, Load_LGRJ, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'LGRS', Save_LGRS, Load_LGRS, Ptrs_LGRS, nullptr, CH_LAST }
|
||||
{ 'LGRS', Save_LGRS, Load_LGRS, Ptrs_LGRS, nullptr, CH_RIFF }
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _linkgraph_chunk_handlers(linkgraph_chunk_handlers);
|
||||
|
||||
@@ -296,17 +296,19 @@ static void Save_WMAP()
|
||||
#endif
|
||||
}
|
||||
|
||||
extern const ChunkHandler _map_chunk_handlers[] = {
|
||||
static const ChunkHandler map_chunk_handlers[] = {
|
||||
{ 'MAPS', Save_MAPS, Load_MAPS, nullptr, Check_MAPS, CH_RIFF },
|
||||
{ 'MAPT', nullptr, Load_MAPT, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAPH', nullptr, Load_MAPH, nullptr, Check_MAPH, CH_RIFF },
|
||||
{ 'MAPO', nullptr, Load_MAP1, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAP2', nullptr, Load_MAP2, nullptr, nullptr, CH_RIFF },
|
||||
{ 'M3LO', nullptr, Load_MAP3, nullptr, nullptr, CH_RIFF },
|
||||
{ 'M3HI', nullptr, Load_MAP4, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAP5', nullptr, Load_MAP5, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAPE', nullptr, Load_MAP6, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAP7', nullptr, Load_MAP7, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAP8', nullptr, Load_MAP8, nullptr, nullptr, CH_RIFF },
|
||||
{ 'WMAP', Save_WMAP, Load_WMAP, nullptr, nullptr, CH_RIFF | CH_LAST },
|
||||
{ 'MAPT', nullptr, Load_MAPT, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAPH', nullptr, Load_MAPH, nullptr, Check_MAPH, CH_RIFF },
|
||||
{ 'MAPO', nullptr, Load_MAP1, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAP2', nullptr, Load_MAP2, nullptr, nullptr, CH_RIFF },
|
||||
{ 'M3LO', nullptr, Load_MAP3, nullptr, nullptr, CH_RIFF },
|
||||
{ 'M3HI', nullptr, Load_MAP4, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAP5', nullptr, Load_MAP5, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAPE', nullptr, Load_MAP6, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAP7', nullptr, Load_MAP7, nullptr, nullptr, CH_RIFF },
|
||||
{ 'MAP8', nullptr, Load_MAP8, nullptr, nullptr, CH_RIFF },
|
||||
{ 'WMAP', Save_WMAP, Load_WMAP, nullptr, nullptr, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _map_chunk_handlers(map_chunk_handlers);
|
||||
|
||||
@@ -160,7 +160,9 @@ static void SaveLoad_VIEW()
|
||||
SlGlobList(_view_desc);
|
||||
}
|
||||
|
||||
extern const ChunkHandler _misc_chunk_handlers[] = {
|
||||
{ 'DATE', SaveLoad_DATE, SaveLoad_DATE, nullptr, Check_DATE, CH_RIFF},
|
||||
{ 'VIEW', SaveLoad_VIEW, SaveLoad_VIEW, nullptr, nullptr, CH_RIFF | CH_LAST},
|
||||
static const ChunkHandler misc_chunk_handlers[] = {
|
||||
{ 'DATE', SaveLoad_DATE, SaveLoad_DATE, nullptr, Check_DATE, CH_RIFF },
|
||||
{ 'VIEW', SaveLoad_VIEW, SaveLoad_VIEW, nullptr, nullptr, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _misc_chunk_handlers(misc_chunk_handlers);
|
||||
|
||||
@@ -119,6 +119,8 @@ static void Check_NGRF()
|
||||
Load_NGRF_common(_load_check_data.grfconfig);
|
||||
}
|
||||
|
||||
extern const ChunkHandler _newgrf_chunk_handlers[] = {
|
||||
{ 'NGRF', Save_NGRF, Load_NGRF, nullptr, Check_NGRF, CH_ARRAY | CH_LAST }
|
||||
static const ChunkHandler newgrf_chunk_handlers[] = {
|
||||
{ 'NGRF', Save_NGRF, Load_NGRF, nullptr, Check_NGRF, CH_ARRAY }
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _newgrf_chunk_handlers(newgrf_chunk_handlers);
|
||||
|
||||
@@ -66,7 +66,9 @@ static void Load_OBID()
|
||||
Load_NewGRFMapping(_object_mngr);
|
||||
}
|
||||
|
||||
extern const ChunkHandler _object_chunk_handlers[] = {
|
||||
static const ChunkHandler object_chunk_handlers[] = {
|
||||
{ 'OBID', Save_OBID, Load_OBID, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'OBJS', Save_OBJS, Load_OBJS, Ptrs_OBJS, nullptr, CH_ARRAY | CH_LAST},
|
||||
{ 'OBJS', Save_OBJS, Load_OBJS, Ptrs_OBJS, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _object_chunk_handlers(object_chunk_handlers);
|
||||
|
||||
@@ -371,9 +371,11 @@ static void Ptrs_BKOR()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _order_chunk_handlers[] = {
|
||||
{ 'BKOR', Save_BKOR, Load_BKOR, Ptrs_BKOR, nullptr, CH_ARRAY},
|
||||
{ 'ORDR', Save_ORDR, Load_ORDR, Ptrs_ORDR, nullptr, CH_ARRAY},
|
||||
{ 'ORDL', Save_ORDL, Load_ORDL, Ptrs_ORDL, nullptr, CH_ARRAY},
|
||||
{ 'ORDX', Save_ORDX, Load_ORDX, nullptr, nullptr, CH_SPARSE_ARRAY | CH_LAST},
|
||||
static const ChunkHandler order_chunk_handlers[] = {
|
||||
{ 'BKOR', Save_BKOR, Load_BKOR, Ptrs_BKOR, nullptr, CH_ARRAY },
|
||||
{ 'ORDR', Save_ORDR, Load_ORDR, Ptrs_ORDR, nullptr, CH_ARRAY },
|
||||
{ 'ORDL', Save_ORDL, Load_ORDL, Ptrs_ORDL, nullptr, CH_ARRAY },
|
||||
{ 'ORDX', Save_ORDX, Load_ORDX, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _order_chunk_handlers(order_chunk_handlers);
|
||||
|
||||
@@ -89,7 +89,9 @@ static void Load_PLANLINE()
|
||||
}
|
||||
|
||||
/** Chunk handlers related to plans. */
|
||||
extern const ChunkHandler _plan_chunk_handlers[] = {
|
||||
{ 'PLAN', Save_PLAN, Load_PLAN, nullptr, nullptr, CH_ARRAY},
|
||||
{ 'PLLN', nullptr, Load_PLANLINE, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler plan_chunk_handlers[] = {
|
||||
{ 'PLAN', Save_PLAN, Load_PLAN, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'PLLN', nullptr, Load_PLANLINE, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _plan_chunk_handlers(plan_chunk_handlers);
|
||||
|
||||
@@ -246,106 +246,112 @@ MemoryDumper *MemoryDumper::GetCurrent()
|
||||
return _sl.dumper;
|
||||
}
|
||||
|
||||
/* these define the chunks */
|
||||
extern const ChunkHandler _version_ext_chunk_handlers[];
|
||||
extern const ChunkHandler _gamelog_chunk_handlers[];
|
||||
extern const ChunkHandler _map_chunk_handlers[];
|
||||
extern const ChunkHandler _misc_chunk_handlers[];
|
||||
extern const ChunkHandler _name_chunk_handlers[];
|
||||
extern const ChunkHandler _cheat_chunk_handlers[] ;
|
||||
extern const ChunkHandler _setting_chunk_handlers[];
|
||||
extern const ChunkHandler _company_chunk_handlers[];
|
||||
extern const ChunkHandler _engine_chunk_handlers[];
|
||||
extern const ChunkHandler _veh_chunk_handlers[];
|
||||
extern const ChunkHandler _waypoint_chunk_handlers[];
|
||||
extern const ChunkHandler _depot_chunk_handlers[];
|
||||
extern const ChunkHandler _order_chunk_handlers[];
|
||||
extern const ChunkHandler _town_chunk_handlers[];
|
||||
extern const ChunkHandler _sign_chunk_handlers[];
|
||||
extern const ChunkHandler _station_chunk_handlers[];
|
||||
extern const ChunkHandler _industry_chunk_handlers[];
|
||||
extern const ChunkHandler _economy_chunk_handlers[];
|
||||
extern const ChunkHandler _subsidy_chunk_handlers[];
|
||||
extern const ChunkHandler _cargomonitor_chunk_handlers[];
|
||||
extern const ChunkHandler _goal_chunk_handlers[];
|
||||
extern const ChunkHandler _story_page_chunk_handlers[];
|
||||
extern const ChunkHandler _ai_chunk_handlers[];
|
||||
extern const ChunkHandler _game_chunk_handlers[];
|
||||
extern const ChunkHandler _animated_tile_chunk_handlers[];
|
||||
extern const ChunkHandler _newgrf_chunk_handlers[];
|
||||
extern const ChunkHandler _group_chunk_handlers[];
|
||||
extern const ChunkHandler _cargopacket_chunk_handlers[];
|
||||
extern const ChunkHandler _autoreplace_chunk_handlers[];
|
||||
extern const ChunkHandler _labelmaps_chunk_handlers[];
|
||||
extern const ChunkHandler _linkgraph_chunk_handlers[];
|
||||
extern const ChunkHandler _airport_chunk_handlers[];
|
||||
extern const ChunkHandler _object_chunk_handlers[];
|
||||
extern const ChunkHandler _persistent_storage_chunk_handlers[];
|
||||
extern const ChunkHandler _trace_restrict_chunk_handlers[];
|
||||
extern const ChunkHandler _signal_chunk_handlers[];
|
||||
extern const ChunkHandler _plan_chunk_handlers[];
|
||||
extern const ChunkHandler _template_replacement_chunk_handlers[];
|
||||
extern const ChunkHandler _template_vehicle_chunk_handlers[];
|
||||
extern const ChunkHandler _bridge_signal_chunk_handlers[];
|
||||
extern const ChunkHandler _tunnel_chunk_handlers[];
|
||||
extern const ChunkHandler _train_speed_adaptation_chunk_handlers[];
|
||||
extern const ChunkHandler _debug_chunk_handlers[];
|
||||
static const std::vector<ChunkHandler> &ChunkHandlers()
|
||||
{
|
||||
/* These define the chunks */
|
||||
extern const ChunkHandlerTable _version_ext_chunk_handlers;
|
||||
extern const ChunkHandlerTable _gamelog_chunk_handlers;
|
||||
extern const ChunkHandlerTable _map_chunk_handlers;
|
||||
extern const ChunkHandlerTable _misc_chunk_handlers;
|
||||
extern const ChunkHandlerTable _name_chunk_handlers;
|
||||
extern const ChunkHandlerTable _cheat_chunk_handlers;
|
||||
extern const ChunkHandlerTable _setting_chunk_handlers;
|
||||
extern const ChunkHandlerTable _company_chunk_handlers;
|
||||
extern const ChunkHandlerTable _engine_chunk_handlers;
|
||||
extern const ChunkHandlerTable _veh_chunk_handlers;
|
||||
extern const ChunkHandlerTable _waypoint_chunk_handlers;
|
||||
extern const ChunkHandlerTable _depot_chunk_handlers;
|
||||
extern const ChunkHandlerTable _order_chunk_handlers;
|
||||
extern const ChunkHandlerTable _town_chunk_handlers;
|
||||
extern const ChunkHandlerTable _sign_chunk_handlers;
|
||||
extern const ChunkHandlerTable _station_chunk_handlers;
|
||||
extern const ChunkHandlerTable _industry_chunk_handlers;
|
||||
extern const ChunkHandlerTable _economy_chunk_handlers;
|
||||
extern const ChunkHandlerTable _subsidy_chunk_handlers;
|
||||
extern const ChunkHandlerTable _cargomonitor_chunk_handlers;
|
||||
extern const ChunkHandlerTable _goal_chunk_handlers;
|
||||
extern const ChunkHandlerTable _story_page_chunk_handlers;
|
||||
extern const ChunkHandlerTable _ai_chunk_handlers;
|
||||
extern const ChunkHandlerTable _game_chunk_handlers;
|
||||
extern const ChunkHandlerTable _animated_tile_chunk_handlers;
|
||||
extern const ChunkHandlerTable _newgrf_chunk_handlers;
|
||||
extern const ChunkHandlerTable _group_chunk_handlers;
|
||||
extern const ChunkHandlerTable _cargopacket_chunk_handlers;
|
||||
extern const ChunkHandlerTable _autoreplace_chunk_handlers;
|
||||
extern const ChunkHandlerTable _labelmaps_chunk_handlers;
|
||||
extern const ChunkHandlerTable _linkgraph_chunk_handlers;
|
||||
extern const ChunkHandlerTable _airport_chunk_handlers;
|
||||
extern const ChunkHandlerTable _object_chunk_handlers;
|
||||
extern const ChunkHandlerTable _persistent_storage_chunk_handlers;
|
||||
extern const ChunkHandlerTable _trace_restrict_chunk_handlers;
|
||||
extern const ChunkHandlerTable _signal_chunk_handlers;
|
||||
extern const ChunkHandlerTable _plan_chunk_handlers;
|
||||
extern const ChunkHandlerTable _template_replacement_chunk_handlers;
|
||||
extern const ChunkHandlerTable _template_vehicle_chunk_handlers;
|
||||
extern const ChunkHandlerTable _bridge_signal_chunk_handlers;
|
||||
extern const ChunkHandlerTable _tunnel_chunk_handlers;
|
||||
extern const ChunkHandlerTable _train_speed_adaptation_chunk_handlers;
|
||||
extern const ChunkHandlerTable _debug_chunk_handlers;
|
||||
|
||||
/** Array of all chunks in a savegame, \c nullptr terminated. */
|
||||
static const ChunkHandler * const _chunk_handlers[] = {
|
||||
_version_ext_chunk_handlers, // this should be first, such that it is saved first, as when loading it affects the loading of subsequent chunks
|
||||
_gamelog_chunk_handlers,
|
||||
_map_chunk_handlers,
|
||||
_misc_chunk_handlers,
|
||||
_name_chunk_handlers,
|
||||
_cheat_chunk_handlers,
|
||||
_setting_chunk_handlers,
|
||||
_veh_chunk_handlers,
|
||||
_waypoint_chunk_handlers,
|
||||
_depot_chunk_handlers,
|
||||
_order_chunk_handlers,
|
||||
_industry_chunk_handlers,
|
||||
_economy_chunk_handlers,
|
||||
_subsidy_chunk_handlers,
|
||||
_cargomonitor_chunk_handlers,
|
||||
_goal_chunk_handlers,
|
||||
_story_page_chunk_handlers,
|
||||
_engine_chunk_handlers,
|
||||
_town_chunk_handlers,
|
||||
_sign_chunk_handlers,
|
||||
_station_chunk_handlers,
|
||||
_company_chunk_handlers,
|
||||
_ai_chunk_handlers,
|
||||
_game_chunk_handlers,
|
||||
_animated_tile_chunk_handlers,
|
||||
_newgrf_chunk_handlers,
|
||||
_group_chunk_handlers,
|
||||
_cargopacket_chunk_handlers,
|
||||
_autoreplace_chunk_handlers,
|
||||
_labelmaps_chunk_handlers,
|
||||
_linkgraph_chunk_handlers,
|
||||
_airport_chunk_handlers,
|
||||
_object_chunk_handlers,
|
||||
_persistent_storage_chunk_handlers,
|
||||
_trace_restrict_chunk_handlers,
|
||||
_signal_chunk_handlers,
|
||||
_plan_chunk_handlers,
|
||||
_template_replacement_chunk_handlers,
|
||||
_template_vehicle_chunk_handlers,
|
||||
_bridge_signal_chunk_handlers,
|
||||
_tunnel_chunk_handlers,
|
||||
_train_speed_adaptation_chunk_handlers,
|
||||
_debug_chunk_handlers,
|
||||
nullptr,
|
||||
};
|
||||
/** List of all chunks in a savegame. */
|
||||
static const ChunkHandlerTable _chunk_handler_tables[] = {
|
||||
_version_ext_chunk_handlers,
|
||||
_gamelog_chunk_handlers,
|
||||
_map_chunk_handlers,
|
||||
_misc_chunk_handlers,
|
||||
_name_chunk_handlers,
|
||||
_cheat_chunk_handlers,
|
||||
_setting_chunk_handlers,
|
||||
_veh_chunk_handlers,
|
||||
_waypoint_chunk_handlers,
|
||||
_depot_chunk_handlers,
|
||||
_order_chunk_handlers,
|
||||
_industry_chunk_handlers,
|
||||
_economy_chunk_handlers,
|
||||
_subsidy_chunk_handlers,
|
||||
_cargomonitor_chunk_handlers,
|
||||
_goal_chunk_handlers,
|
||||
_story_page_chunk_handlers,
|
||||
_engine_chunk_handlers,
|
||||
_town_chunk_handlers,
|
||||
_sign_chunk_handlers,
|
||||
_station_chunk_handlers,
|
||||
_company_chunk_handlers,
|
||||
_ai_chunk_handlers,
|
||||
_game_chunk_handlers,
|
||||
_animated_tile_chunk_handlers,
|
||||
_newgrf_chunk_handlers,
|
||||
_group_chunk_handlers,
|
||||
_cargopacket_chunk_handlers,
|
||||
_autoreplace_chunk_handlers,
|
||||
_labelmaps_chunk_handlers,
|
||||
_linkgraph_chunk_handlers,
|
||||
_airport_chunk_handlers,
|
||||
_object_chunk_handlers,
|
||||
_persistent_storage_chunk_handlers,
|
||||
_trace_restrict_chunk_handlers,
|
||||
_signal_chunk_handlers,
|
||||
_plan_chunk_handlers,
|
||||
_template_replacement_chunk_handlers,
|
||||
_template_vehicle_chunk_handlers,
|
||||
_bridge_signal_chunk_handlers,
|
||||
_tunnel_chunk_handlers,
|
||||
_train_speed_adaptation_chunk_handlers,
|
||||
_debug_chunk_handlers,
|
||||
};
|
||||
|
||||
/**
|
||||
* Iterate over all chunk handlers.
|
||||
* @param ch the chunk handler iterator
|
||||
*/
|
||||
#define FOR_ALL_CHUNK_HANDLERS(ch) \
|
||||
for (const ChunkHandler * const *chsc = _chunk_handlers; *chsc != nullptr; chsc++) \
|
||||
for (const ChunkHandler *ch = *chsc; ch != nullptr; ch = (ch->flags & CH_LAST) ? nullptr : ch + 1)
|
||||
static std::vector<ChunkHandler> _chunk_handlers;
|
||||
|
||||
if (_chunk_handlers.empty()) {
|
||||
for (auto &chunk_handler_table : _chunk_handler_tables) {
|
||||
for (auto &chunk_handler : chunk_handler_table) {
|
||||
_chunk_handlers.push_back(chunk_handler);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return _chunk_handlers;
|
||||
}
|
||||
|
||||
/** Null all pointers (convert index -> nullptr) */
|
||||
static void SlNullPointers()
|
||||
@@ -358,10 +364,10 @@ static void SlNullPointers()
|
||||
_sl_version = SAVEGAME_VERSION;
|
||||
SlXvSetCurrentState();
|
||||
|
||||
FOR_ALL_CHUNK_HANDLERS(ch) {
|
||||
if (ch->ptrs_proc != nullptr) {
|
||||
DEBUG(sl, 3, "Nulling pointers for %c%c%c%c", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id);
|
||||
ch->ptrs_proc();
|
||||
for (auto &ch : ChunkHandlers()) {
|
||||
if (ch.ptrs_proc != nullptr) {
|
||||
DEBUG(sl, 3, "Nulling pointers for %c%c%c%c", ch.id >> 24, ch.id >> 16, ch.id >> 8, ch.id);
|
||||
ch.ptrs_proc();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1682,14 +1688,12 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad &sld)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef OTTD_ASSERT
|
||||
|
||||
/**
|
||||
* Check whether the variable size of the variable in the saveload configuration
|
||||
* matches with the actual variable size.
|
||||
* @param sld The saveload configuration to test.
|
||||
*/
|
||||
static bool IsVariableSizeRight(const SaveLoad &sld)
|
||||
[[maybe_unused]] static bool IsVariableSizeRight(const SaveLoad &sld)
|
||||
{
|
||||
switch (sld.cmd) {
|
||||
case SL_VAR:
|
||||
@@ -1730,15 +1734,11 @@ static bool IsVariableSizeRight(const SaveLoad &sld)
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* OTTD_ASSERT */
|
||||
|
||||
void SlFilterObject(const SaveLoadTable &slt, std::vector<SaveLoad> &save);
|
||||
|
||||
static void SlFilterObjectMember(const SaveLoad &sld, std::vector<SaveLoad> &save)
|
||||
{
|
||||
#ifdef OTTD_ASSERT
|
||||
assert(IsVariableSizeRight(sld));
|
||||
#endif
|
||||
|
||||
switch (sld.cmd) {
|
||||
case SL_VAR:
|
||||
@@ -1817,9 +1817,7 @@ std::vector<SaveLoad> SlFilterObject(const SaveLoadTable &slt)
|
||||
template <SaveLoadAction action, bool check_version>
|
||||
bool SlObjectMemberGeneric(void *ptr, const SaveLoad &sld)
|
||||
{
|
||||
#ifdef OTTD_ASSERT
|
||||
if (check_version) assert(IsVariableSizeRight(sld));
|
||||
#endif
|
||||
|
||||
VarType conv = GB(sld.conv, 0, 8);
|
||||
switch (sld.cmd) {
|
||||
@@ -2043,7 +2041,7 @@ inline void SlRIFFSpringPPCheck(size_t len)
|
||||
* Load a chunk of data (eg vehicles, stations, etc.)
|
||||
* @param ch The chunkhandler that will be used for the operation
|
||||
*/
|
||||
static void SlLoadChunk(const ChunkHandler *ch)
|
||||
static void SlLoadChunk(const ChunkHandler &ch)
|
||||
{
|
||||
byte m = SlReadByte();
|
||||
size_t len;
|
||||
@@ -2064,11 +2062,11 @@ static void SlLoadChunk(const ChunkHandler *ch)
|
||||
switch (m) {
|
||||
case CH_ARRAY:
|
||||
_sl.array_index = 0;
|
||||
ch->load_proc();
|
||||
ch.load_proc();
|
||||
if (_next_offs != 0) SlErrorCorrupt("Invalid array length");
|
||||
break;
|
||||
case CH_SPARSE_ARRAY:
|
||||
ch->load_proc();
|
||||
ch.load_proc();
|
||||
if (_next_offs != 0) SlErrorCorrupt("Invalid array length");
|
||||
break;
|
||||
default:
|
||||
@@ -2089,7 +2087,7 @@ static void SlLoadChunk(const ChunkHandler *ch)
|
||||
|
||||
_sl.obj_len = len;
|
||||
endoffs = _sl.reader->GetSize() + len;
|
||||
ch->load_proc();
|
||||
ch.load_proc();
|
||||
if (_sl.reader->GetSize() != endoffs) {
|
||||
DEBUG(sl, 1, "Invalid chunk size: " PRINTF_SIZE " != " PRINTF_SIZE ", (" PRINTF_SIZE ")", _sl.reader->GetSize(), endoffs, len);
|
||||
SlErrorCorrupt("Invalid chunk size");
|
||||
@@ -2192,21 +2190,21 @@ static void SlLoadCheckChunk(const ChunkHandler *ch)
|
||||
* prefixed by an ID identifying it, followed by data, and terminator where appropriate
|
||||
* @param ch The chunkhandler that will be used for the operation
|
||||
*/
|
||||
static void SlSaveChunk(const ChunkHandler *ch)
|
||||
static void SlSaveChunk(const ChunkHandler &ch)
|
||||
{
|
||||
ChunkSaveLoadProc *proc = ch->save_proc;
|
||||
ChunkSaveLoadProc *proc = ch.save_proc;
|
||||
|
||||
/* Don't save any chunk information if there is no save handler. */
|
||||
if (proc == nullptr) return;
|
||||
|
||||
SlWriteUint32(ch->id);
|
||||
DEBUG(sl, 2, "Saving chunk %c%c%c%c", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id);
|
||||
SlWriteUint32(ch.id);
|
||||
DEBUG(sl, 2, "Saving chunk %c%c%c%c", ch.id >> 24, ch.id >> 16, ch.id >> 8, ch.id);
|
||||
|
||||
size_t written = 0;
|
||||
if (_debug_sl_level >= 3) written = SlGetBytesWritten();
|
||||
|
||||
_sl.block_mode = ch->flags & CH_TYPE_MASK;
|
||||
switch (ch->flags & CH_TYPE_MASK) {
|
||||
_sl.block_mode = ch.type;
|
||||
switch (ch.type) {
|
||||
case CH_RIFF:
|
||||
_sl.need_length = NL_WANTLENGTH;
|
||||
proc();
|
||||
@@ -2225,13 +2223,13 @@ static void SlSaveChunk(const ChunkHandler *ch)
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
|
||||
DEBUG(sl, 3, "Saved chunk %c%c%c%c (" PRINTF_SIZE " bytes)", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id, SlGetBytesWritten() - written);
|
||||
DEBUG(sl, 3, "Saved chunk %c%c%c%c (" PRINTF_SIZE " bytes)", ch.id >> 24, ch.id >> 16, ch.id >> 8, ch.id, SlGetBytesWritten() - written);
|
||||
}
|
||||
|
||||
/** Save all chunks */
|
||||
static void SlSaveChunks()
|
||||
{
|
||||
FOR_ALL_CHUNK_HANDLERS(ch) {
|
||||
for (auto &ch : ChunkHandlers()) {
|
||||
SlSaveChunk(ch);
|
||||
}
|
||||
|
||||
@@ -2247,7 +2245,7 @@ static void SlSaveChunks()
|
||||
*/
|
||||
static const ChunkHandler *SlFindChunkHandler(uint32 id)
|
||||
{
|
||||
FOR_ALL_CHUNK_HANDLERS(ch) if (ch->id == id) return ch;
|
||||
for (auto &ch : ChunkHandlers()) if (ch.id == id) return &ch;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -2267,7 +2265,7 @@ static void SlLoadChunks()
|
||||
if (ch == nullptr) {
|
||||
SlErrorCorrupt("Unknown chunk type");
|
||||
} else {
|
||||
SlLoadChunk(ch);
|
||||
SlLoadChunk(*ch);
|
||||
}
|
||||
}
|
||||
DEBUG(sl, 3, "Loaded chunk %c%c%c%c (" PRINTF_SIZE " bytes)", id >> 24, id >> 16, id >> 8, id, SlGetBytesRead() - read);
|
||||
@@ -2301,10 +2299,10 @@ static void SlFixPointers()
|
||||
{
|
||||
_sl.action = SLA_PTRS;
|
||||
|
||||
FOR_ALL_CHUNK_HANDLERS(ch) {
|
||||
if (ch->ptrs_proc != nullptr) {
|
||||
DEBUG(sl, 3, "Fixing pointers for %c%c%c%c", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id);
|
||||
ch->ptrs_proc();
|
||||
for (auto &ch : ChunkHandlers()) {
|
||||
if (ch.ptrs_proc != nullptr) {
|
||||
DEBUG(sl, 3, "Fixing pointers for %c%c%c%c", ch.id >> 24, ch.id >> 16, ch.id >> 8, ch.id);
|
||||
ch.ptrs_proc();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <stdarg.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
/** SaveLoad versions
|
||||
* Previous savegame versions, the trunk revision where they were
|
||||
@@ -415,6 +416,14 @@ bool IsNetworkServerSave();
|
||||
typedef void ChunkSaveLoadProc();
|
||||
typedef void AutolengthProc(void *arg);
|
||||
|
||||
/** Type of a chunk. */
|
||||
enum ChunkType {
|
||||
CH_RIFF = 0,
|
||||
CH_ARRAY = 1,
|
||||
CH_SPARSE_ARRAY = 2,
|
||||
CH_EXT_HDR = 15, ///< Extended chunk header
|
||||
};
|
||||
|
||||
/** Handlers and description of chunk. */
|
||||
struct ChunkHandler {
|
||||
uint32 id; ///< Unique ID (4 letters).
|
||||
@@ -422,13 +431,16 @@ struct ChunkHandler {
|
||||
ChunkSaveLoadProc *load_proc; ///< Load procedure of the chunk.
|
||||
ChunkSaveLoadProc *ptrs_proc; ///< Manipulate pointers in the chunk.
|
||||
ChunkSaveLoadProc *load_check_proc; ///< Load procedure for game preview.
|
||||
uint32 flags; ///< Flags of the chunk. @see ChunkType
|
||||
ChunkType type; ///< Type of the chunk. @see ChunkType
|
||||
};
|
||||
|
||||
struct NullStruct {
|
||||
byte null;
|
||||
};
|
||||
|
||||
/** A table of ChunkHandler entries. */
|
||||
using ChunkHandlerTable = span<const ChunkHandler>;
|
||||
|
||||
/** Type of reference (#SLE_REF, #SLE_CONDREF). */
|
||||
enum SLRefType {
|
||||
REF_ORDER = 0, ///< Load/save a reference to an order.
|
||||
@@ -446,16 +458,6 @@ enum SLRefType {
|
||||
REF_TEMPLATE_VEHICLE = 12, ///< Load/save a reference to a template vehicle
|
||||
};
|
||||
|
||||
/** Flags of a chunk. */
|
||||
enum ChunkType {
|
||||
CH_RIFF = 0,
|
||||
CH_ARRAY = 1,
|
||||
CH_SPARSE_ARRAY = 2,
|
||||
CH_TYPE_MASK = 3,
|
||||
CH_EXT_HDR = 15, ///< Extended chunk header
|
||||
CH_LAST = 8, ///< Last chunk in this array.
|
||||
};
|
||||
|
||||
/** Flags for chunk extended headers */
|
||||
enum SaveLoadChunkExtHeaderFlags {
|
||||
SLCEHF_BIG_RIFF = 1 << 0, ///< This block uses a 60-bit RIFF chunk size
|
||||
@@ -541,8 +543,6 @@ enum VarTypes {
|
||||
SLF_NO_NETWORK_SYNC = 1 << 10, ///< do not synchronize over network (but it is saved if SLF_NOT_IN_SAVE is not set)
|
||||
SLF_ALLOW_CONTROL = 1 << 11, ///< allow control codes in the strings
|
||||
SLF_ALLOW_NEWLINE = 1 << 12, ///< allow new lines in the strings
|
||||
SLF_HEX = 1 << 13, ///< print numbers as hex in the config file (only useful for unsigned)
|
||||
/* 2 more possible flags */
|
||||
};
|
||||
|
||||
typedef uint32 VarType;
|
||||
|
||||
@@ -307,6 +307,8 @@ static void Load_SPRG()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _signal_chunk_handlers[] = {
|
||||
{ 'SPRG', Save_SPRG, Load_SPRG, nullptr, nullptr, CH_RIFF | CH_LAST},
|
||||
extern const ChunkHandler signal_chunk_handlers[] = {
|
||||
{ 'SPRG', Save_SPRG, Load_SPRG, nullptr, nullptr, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _signal_chunk_handlers(signal_chunk_handlers);
|
||||
|
||||
@@ -62,6 +62,8 @@ static void Load_SIGN()
|
||||
}
|
||||
|
||||
/** Chunk handlers related to signs. */
|
||||
extern const ChunkHandler _sign_chunk_handlers[] = {
|
||||
{ 'SIGN', Save_SIGN, Load_SIGN, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler sign_chunk_handlers[] = {
|
||||
{ 'SIGN', Save_SIGN, Load_SIGN, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _sign_chunk_handlers(sign_chunk_handlers);
|
||||
|
||||
@@ -743,9 +743,11 @@ static void Load_DOCK()
|
||||
SlSkipArray();
|
||||
}
|
||||
|
||||
extern const ChunkHandler _station_chunk_handlers[] = {
|
||||
static const ChunkHandler station_chunk_handlers[] = {
|
||||
{ 'STNS', nullptr, Load_STNS, Ptrs_STNS, nullptr, CH_ARRAY },
|
||||
{ 'STNN', Save_STNN, Load_STNN, Ptrs_STNN, nullptr, CH_ARRAY },
|
||||
{ 'ROAD', Save_ROADSTOP, Load_ROADSTOP, Ptrs_ROADSTOP, nullptr, CH_ARRAY},
|
||||
{ 'DOCK', nullptr, Load_DOCK, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
{ 'ROAD', Save_ROADSTOP, Load_ROADSTOP, Ptrs_ROADSTOP, nullptr, CH_ARRAY },
|
||||
{ 'DOCK', nullptr, Load_DOCK, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _station_chunk_handlers(station_chunk_handlers);
|
||||
|
||||
@@ -44,6 +44,8 @@ static void Save_PSAC()
|
||||
}
|
||||
|
||||
/** Chunk handler for persistent storages. */
|
||||
extern const ChunkHandler _persistent_storage_chunk_handlers[] = {
|
||||
{ 'PSAC', Save_PSAC, Load_PSAC, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler persistent_storage_chunk_handlers[] = {
|
||||
{ 'PSAC', Save_PSAC, Load_PSAC, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _persistent_storage_chunk_handlers(persistent_storage_chunk_handlers);
|
||||
|
||||
@@ -95,7 +95,9 @@ static void Load_STORY_PAGE()
|
||||
_story_page_next_sort_value = max_sort_value + 1;
|
||||
}
|
||||
|
||||
extern const ChunkHandler _story_page_chunk_handlers[] = {
|
||||
{ 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_ARRAY},
|
||||
{ 'STPA', Save_STORY_PAGE, Load_STORY_PAGE, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler story_page_chunk_handlers[] = {
|
||||
{ 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'STPA', Save_STORY_PAGE, Load_STORY_PAGE, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _story_page_chunk_handlers(story_page_chunk_handlers);
|
||||
|
||||
@@ -131,6 +131,8 @@ static void Load_NAME()
|
||||
}
|
||||
|
||||
/** Chunk handlers related to strings. */
|
||||
extern const ChunkHandler _name_chunk_handlers[] = {
|
||||
{ 'NAME', nullptr, Load_NAME, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler name_chunk_handlers[] = {
|
||||
{ 'NAME', nullptr, Load_NAME, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _name_chunk_handlers(name_chunk_handlers);
|
||||
|
||||
@@ -44,6 +44,8 @@ static void Load_SUBS()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _subsidy_chunk_handlers[] = {
|
||||
{ 'SUBS', Save_SUBS, Load_SUBS, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler subsidy_chunk_handlers[] = {
|
||||
{ 'SUBS', Save_SUBS, Load_SUBS, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _subsidy_chunk_handlers(subsidy_chunk_handlers);
|
||||
|
||||
@@ -28,6 +28,8 @@ static void Load_TMPL_RPLS()
|
||||
ReindexTemplateReplacements();
|
||||
}
|
||||
|
||||
extern const ChunkHandler _template_replacement_chunk_handlers[] = {
|
||||
{'TRPL', Save_TMPL_RPLS, Load_TMPL_RPLS, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
extern const ChunkHandler template_replacement_chunk_handlers[] = {
|
||||
{ 'TRPL', Save_TMPL_RPLS, Load_TMPL_RPLS, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _template_replacement_chunk_handlers(template_replacement_chunk_handlers);
|
||||
|
||||
@@ -151,6 +151,8 @@ void AfterLoadTemplateVehiclesUpdateProperties()
|
||||
RestoreRandomSeeds(saved_seeds);
|
||||
}
|
||||
|
||||
extern const ChunkHandler _template_vehicle_chunk_handlers[] = {
|
||||
{'TMPL', Save_TMPLS, Load_TMPLS, Ptrs_TMPLS, nullptr, CH_ARRAY | CH_LAST},
|
||||
extern const ChunkHandler template_vehicle_chunk_handlers[] = {
|
||||
{ 'TMPL', Save_TMPLS, Load_TMPLS, Ptrs_TMPLS, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _template_vehicle_chunk_handlers(template_vehicle_chunk_handlers);
|
||||
|
||||
@@ -359,7 +359,9 @@ static void Ptrs_TOWN()
|
||||
}
|
||||
|
||||
/** Chunk handler for towns. */
|
||||
extern const ChunkHandler _town_chunk_handlers[] = {
|
||||
static const ChunkHandler town_chunk_handlers[] = {
|
||||
{ 'HIDS', Save_HIDS, Load_HIDS, nullptr, nullptr, CH_ARRAY },
|
||||
{ 'CITY', Save_TOWN, Load_TOWN, Ptrs_TOWN, nullptr, CH_ARRAY | CH_LAST},
|
||||
{ 'CITY', Save_TOWN, Load_TOWN, Ptrs_TOWN, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _town_chunk_handlers(town_chunk_handlers);
|
||||
|
||||
@@ -214,9 +214,11 @@ void AfterLoadTraceRestrict()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _trace_restrict_chunk_handlers[] = {
|
||||
{ 'TRRM', Save_TRRM, Load_TRRM, nullptr, nullptr, CH_SPARSE_ARRAY}, // Trace Restrict Mapping chunk
|
||||
{ 'TRRP', Save_TRRP, Load_TRRP, nullptr, nullptr, CH_ARRAY}, // Trace Restrict Mapping Program Pool chunk
|
||||
{ 'TRRS', Save_TRRS, Load_TRRS, nullptr, nullptr, CH_ARRAY}, // Trace Restrict Slot Pool chunk
|
||||
{ 'TRRC', Save_TRRC, Load_TRRC, nullptr, nullptr, CH_ARRAY | CH_LAST}, // Trace Restrict Counter Pool chunk
|
||||
extern const ChunkHandler trace_restrict_chunk_handlers[] = {
|
||||
{ 'TRRM', Save_TRRM, Load_TRRM, nullptr, nullptr, CH_SPARSE_ARRAY }, // Trace Restrict Mapping chunk
|
||||
{ 'TRRP', Save_TRRP, Load_TRRP, nullptr, nullptr, CH_ARRAY }, // Trace Restrict Mapping Program Pool chunk
|
||||
{ 'TRRS', Save_TRRS, Load_TRRS, nullptr, nullptr, CH_ARRAY }, // Trace Restrict Slot Pool chunk
|
||||
{ 'TRRC', Save_TRRC, Load_TRRC, nullptr, nullptr, CH_ARRAY }, // Trace Restrict Counter Pool chunk
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _trace_restrict_chunk_handlers(trace_restrict_chunk_handlers);
|
||||
|
||||
@@ -45,6 +45,8 @@ static void Save_TSAS()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _train_speed_adaptation_chunk_handlers[] = {
|
||||
{ 'TSAS', Save_TSAS, Load_TSAS, nullptr, nullptr, CH_SPARSE_ARRAY | CH_LAST},
|
||||
extern const ChunkHandler train_speed_adaptation_chunk_handlers[] = {
|
||||
{ 'TSAS', Save_TSAS, Load_TSAS, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _train_speed_adaptation_chunk_handlers(train_speed_adaptation_chunk_handlers);
|
||||
|
||||
@@ -42,6 +42,8 @@ static void Load_TUNN()
|
||||
}
|
||||
|
||||
|
||||
extern const ChunkHandler _tunnel_chunk_handlers[] = {
|
||||
{ 'TUNN', Save_TUNN, Load_TUNN, nullptr, nullptr, CH_ARRAY | CH_LAST},
|
||||
extern const ChunkHandler tunnel_chunk_handlers[] = {
|
||||
{ 'TUNN', Save_TUNN, Load_TUNN, nullptr, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _tunnel_chunk_handlers(tunnel_chunk_handlers);
|
||||
|
||||
@@ -1458,10 +1458,12 @@ void Load_VLKA()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _veh_chunk_handlers[] = {
|
||||
{ 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, nullptr, CH_SPARSE_ARRAY},
|
||||
{ 'VEOX', Save_VEOX, Load_VEOX, nullptr, nullptr, CH_SPARSE_ARRAY},
|
||||
{ 'VESR', Save_VESR, Load_VESR, nullptr, nullptr, CH_SPARSE_ARRAY},
|
||||
{ 'VENC', Save_VENC, Load_VENC, nullptr, nullptr, CH_RIFF},
|
||||
{ 'VLKA', Save_VLKA, Load_VLKA, nullptr, nullptr, CH_SPARSE_ARRAY | CH_LAST},
|
||||
static const ChunkHandler veh_chunk_handlers[] = {
|
||||
{ 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, nullptr, CH_SPARSE_ARRAY },
|
||||
{ 'VEOX', Save_VEOX, Load_VEOX, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
{ 'VESR', Save_VESR, Load_VESR, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
{ 'VENC', Save_VENC, Load_VENC, nullptr, nullptr, CH_RIFF },
|
||||
{ 'VLKA', Save_VLKA, Load_VLKA, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _veh_chunk_handlers(veh_chunk_handlers);
|
||||
|
||||
@@ -224,6 +224,8 @@ static void Ptrs_WAYP()
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler _waypoint_chunk_handlers[] = {
|
||||
{ 'CHKP', nullptr, Load_WAYP, Ptrs_WAYP, nullptr, CH_ARRAY | CH_LAST},
|
||||
static const ChunkHandler waypoint_chunk_handlers[] = {
|
||||
{ 'CHKP', nullptr, Load_WAYP, Ptrs_WAYP, nullptr, CH_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _waypoint_chunk_handlers(waypoint_chunk_handlers);
|
||||
|
||||
Reference in New Issue
Block a user