saveload.c
changeset 2848 8f57563f8ddf
parent 2828 342f02f7c0d4
child 2855 56c39efde08a
equal deleted inserted replaced
2847:65c54f935db6 2848:8f57563f8ddf
    27 #include "saveload.h"
    27 #include "saveload.h"
    28 #include "variables.h"
    28 #include "variables.h"
    29 #include <setjmp.h>
    29 #include <setjmp.h>
    30 
    30 
    31 enum {
    31 enum {
    32 	SAVEGAME_VERSION = 18,
    32 	SAVEGAME_VERSION = 19,
    33 
    33 
    34 };
    34 };
    35 
    35 
    36 uint16 _sl_version;       /// the major savegame version identifier
    36 uint16 _sl_version;       /// the major savegame version identifier
    37 byte   _sl_minor_version; /// the minor savegame version, DO NOT USE!
    37 byte   _sl_minor_version; /// the minor savegame version, DO NOT USE!
  1049 //*******************************************
  1049 //*******************************************
  1050 
  1050 
  1051 // these define the chunks
  1051 // these define the chunks
  1052 extern const ChunkHandler _misc_chunk_handlers[];
  1052 extern const ChunkHandler _misc_chunk_handlers[];
  1053 extern const ChunkHandler _player_chunk_handlers[];
  1053 extern const ChunkHandler _player_chunk_handlers[];
       
  1054 extern const ChunkHandler _engine_chunk_handlers[];
  1054 extern const ChunkHandler _veh_chunk_handlers[];
  1055 extern const ChunkHandler _veh_chunk_handlers[];
  1055 extern const ChunkHandler _waypoint_chunk_handlers[];
  1056 extern const ChunkHandler _waypoint_chunk_handlers[];
  1056 extern const ChunkHandler _depot_chunk_handlers[];
  1057 extern const ChunkHandler _depot_chunk_handlers[];
  1057 extern const ChunkHandler _order_chunk_handlers[];
  1058 extern const ChunkHandler _order_chunk_handlers[];
  1058 extern const ChunkHandler _town_chunk_handlers[];
  1059 extern const ChunkHandler _town_chunk_handlers[];
  1059 extern const ChunkHandler _sign_chunk_handlers[];
  1060 extern const ChunkHandler _sign_chunk_handlers[];
  1060 extern const ChunkHandler _station_chunk_handlers[];
  1061 extern const ChunkHandler _station_chunk_handlers[];
  1061 extern const ChunkHandler _industry_chunk_handlers[];
  1062 extern const ChunkHandler _industry_chunk_handlers[];
  1062 extern const ChunkHandler _engine_chunk_handlers[];
       
  1063 extern const ChunkHandler _economy_chunk_handlers[];
  1063 extern const ChunkHandler _economy_chunk_handlers[];
  1064 extern const ChunkHandler _animated_tile_chunk_handlers[];
  1064 extern const ChunkHandler _animated_tile_chunk_handlers[];
  1065 
  1065 
  1066 static const ChunkHandler * const _chunk_handlers[] = {
  1066 static const ChunkHandler * const _chunk_handlers[] = {
  1067 	_misc_chunk_handlers,
  1067 	_misc_chunk_handlers,
  1105 		case REF_VEHICLE:   return ((const  Vehicle*)obj)->index + 1;
  1105 		case REF_VEHICLE:   return ((const  Vehicle*)obj)->index + 1;
  1106 		case REF_STATION:   return ((const  Station*)obj)->index + 1;
  1106 		case REF_STATION:   return ((const  Station*)obj)->index + 1;
  1107 		case REF_TOWN:      return ((const     Town*)obj)->index + 1;
  1107 		case REF_TOWN:      return ((const     Town*)obj)->index + 1;
  1108 		case REF_ORDER:     return ((const    Order*)obj)->index + 1;
  1108 		case REF_ORDER:     return ((const    Order*)obj)->index + 1;
  1109 		case REF_ROADSTOPS: return ((const RoadStop*)obj)->index + 1;
  1109 		case REF_ROADSTOPS: return ((const RoadStop*)obj)->index + 1;
       
  1110 		case REF_ENGINE_RENEWS: return ((const EngineRenew*)obj)->index + 1;
  1110 		default: NOT_REACHED();
  1111 		default: NOT_REACHED();
  1111 	}
  1112 	}
  1112 
  1113 
  1113 	return 0; // avoid compiler warning
  1114 	return 0; // avoid compiler warning
  1114 }
  1115 }
  1159 		}
  1160 		}
  1160 		case REF_ROADSTOPS: {
  1161 		case REF_ROADSTOPS: {
  1161 			if (!AddBlockIfNeeded(&_roadstop_pool, index))
  1162 			if (!AddBlockIfNeeded(&_roadstop_pool, index))
  1162 				error("RoadStops: failed loading savegame: too many RoadStops");
  1163 				error("RoadStops: failed loading savegame: too many RoadStops");
  1163 			return GetRoadStop(index);
  1164 			return GetRoadStop(index);
       
  1165 		}
       
  1166 		case REF_ENGINE_RENEWS: {
       
  1167 			if (!AddBlockIfNeeded(&_engine_renew_pool, index))
       
  1168 				error("EngineRenews: failed loading savegame: too many EngineRenews");
       
  1169 			return GetEngineRenew(index);
  1164 		}
  1170 		}
  1165 
  1171 
  1166 		case REF_VEHICLE_OLD: {
  1172 		case REF_VEHICLE_OLD: {
  1167 			/* Old vehicles were saved differently:
  1173 			/* Old vehicles were saved differently:
  1168 			 * invalid vehicle was 0xFFFF,
  1174 			 * invalid vehicle was 0xFFFF,