saveload.c
changeset 1024 5e446b5b3ec5
parent 950 165341d74973
child 1093 4fdc46eaf423
equal deleted inserted replaced
1023:1ae7b7a78602 1024:5e446b5b3ec5
     6 #include "player.h"
     6 #include "player.h"
     7 #include "saveload.h"
     7 #include "saveload.h"
     8 
     8 
     9 enum {
     9 enum {
    10 	SAVEGAME_MAJOR_VERSION = 5,
    10 	SAVEGAME_MAJOR_VERSION = 5,
    11 	SAVEGAME_MINOR_VERSION = 1,
    11 	SAVEGAME_MINOR_VERSION = 2,
    12 
    12 
    13 	SAVEGAME_LOADABLE_VERSION = (SAVEGAME_MAJOR_VERSION << 8) + SAVEGAME_MINOR_VERSION
    13 	SAVEGAME_LOADABLE_VERSION = (SAVEGAME_MAJOR_VERSION << 8) + SAVEGAME_MINOR_VERSION
    14 };
    14 };
    15 
    15 
    16 /******************************************************/
    16 /******************************************************/
   867 
   867 
   868 // these define the chunks
   868 // these define the chunks
   869 extern const ChunkHandler _misc_chunk_handlers[];
   869 extern const ChunkHandler _misc_chunk_handlers[];
   870 extern const ChunkHandler _player_chunk_handlers[];
   870 extern const ChunkHandler _player_chunk_handlers[];
   871 extern const ChunkHandler _veh_chunk_handlers[];
   871 extern const ChunkHandler _veh_chunk_handlers[];
       
   872 extern const ChunkHandler _order_chunk_handlers[];
   872 extern const ChunkHandler _town_chunk_handlers[];
   873 extern const ChunkHandler _town_chunk_handlers[];
   873 extern const ChunkHandler _sign_chunk_handlers[];
   874 extern const ChunkHandler _sign_chunk_handlers[];
   874 extern const ChunkHandler _station_chunk_handlers[];
   875 extern const ChunkHandler _station_chunk_handlers[];
   875 extern const ChunkHandler _industry_chunk_handlers[];
   876 extern const ChunkHandler _industry_chunk_handlers[];
   876 extern const ChunkHandler _engine_chunk_handlers[];
   877 extern const ChunkHandler _engine_chunk_handlers[];
   878 extern const ChunkHandler _animated_tile_chunk_handlers[];
   879 extern const ChunkHandler _animated_tile_chunk_handlers[];
   879 
   880 
   880 static const ChunkHandler * const _chunk_handlers[] = {
   881 static const ChunkHandler * const _chunk_handlers[] = {
   881 	_misc_chunk_handlers,
   882 	_misc_chunk_handlers,
   882 	_veh_chunk_handlers,
   883 	_veh_chunk_handlers,
       
   884 	_order_chunk_handlers,
   883 	_industry_chunk_handlers,
   885 	_industry_chunk_handlers,
   884 	_economy_chunk_handlers,
   886 	_economy_chunk_handlers,
   885 	_engine_chunk_handlers,
   887 	_engine_chunk_handlers,
   886 	_town_chunk_handlers,
   888 	_town_chunk_handlers,
   887 	_sign_chunk_handlers,
   889 	_sign_chunk_handlers,
   910 	switch (t) {
   912 	switch (t) {
   911 		case REF_VEHICLE_OLD: // Old vehicles we save as new onces
   913 		case REF_VEHICLE_OLD: // Old vehicles we save as new onces
   912 		case REF_VEHICLE: return ((Vehicle *)v)->index + 1;
   914 		case REF_VEHICLE: return ((Vehicle *)v)->index + 1;
   913 		case REF_STATION: return ((Station *)v)->index + 1;
   915 		case REF_STATION: return ((Station *)v)->index + 1;
   914 		case REF_TOWN:    return ((Town *)v)->index + 1;
   916 		case REF_TOWN:    return ((Town *)v)->index + 1;
   915 
   917 		case REF_ORDER:   return ((Order *)v)->index + 1;
   916 		case REF_SCHEDULE:
       
   917 			return ((byte*)v - (byte*)_order_array) / sizeof(_order_array[0]) + 1;
       
   918 
   918 
   919 		default:
   919 		default:
   920 			NOT_REACHED();
   920 			NOT_REACHED();
   921 	}
   921 	}
   922 
   922 
   933 
   933 
   934 	if (t != REF_VEHICLE_OLD && r == 0)
   934 	if (t != REF_VEHICLE_OLD && r == 0)
   935 		return NULL;
   935 		return NULL;
   936 
   936 
   937 	switch (t) {
   937 	switch (t) {
       
   938 		case REF_ORDER:   return GetOrder(r - 1);
   938 		case REF_VEHICLE: return GetVehicle(r - 1);
   939 		case REF_VEHICLE: return GetVehicle(r - 1);
   939 		case REF_STATION: return GetStation(r - 1);
   940 		case REF_STATION: return GetStation(r - 1);
   940 		case REF_TOWN:    return GetTown(r - 1);
   941 		case REF_TOWN:    return GetTown(r - 1);
   941 
       
   942 		case REF_SCHEDULE:
       
   943 			return (byte*)_order_array + (r - 1) * sizeof(_order_array[0]);
       
   944 
   942 
   945 		case REF_VEHICLE_OLD: {
   943 		case REF_VEHICLE_OLD: {
   946 			/* Old vehicles were saved differently: invalid vehicle was 0xFFFF,
   944 			/* Old vehicles were saved differently: invalid vehicle was 0xFFFF,
   947 			    and the index was not - 1.. correct for this */
   945 			    and the index was not - 1.. correct for this */
   948 			if (r == INVALID_VEHICLE)
   946 			if (r == INVALID_VEHICLE)