Changeset - r4326:7102aa7f4fb2
[Not reviewed]
master
0 25 0
rubidium - 18 years ago 2006-08-20 18:40:57
rubidium@openttd.org
(svn r5999) -Feature: change the original date format to a 32 bits format based at the year 0.
The game date subsystem now allows someone to start in the year 0 and continue
up to the year 5 000 000. However, you currently cannot build anything before
1920 as there is no newgrf support for dates before 1920 or after 2090 yet.
25 files changed with 160 insertions and 87 deletions:
0 comments (0 inline, 0 general)
date.c
Show inline comments
 
@@ -67,56 +67,83 @@ enum {
 
static const uint16 _accum_days_for_month[] = {
 
	ACCUM_JAN, ACCUM_FEB, ACCUM_MAR, ACCUM_APR,
 
	ACCUM_MAY, ACCUM_JUN, ACCUM_JUL, ACCUM_AUG,
 
	ACCUM_SEP, ACCUM_OCT, ACCUM_NOV, ACCUM_DEC,
 
};
 

	
 
static inline bool IsLeapYear(Year yr)
 
{
 
	return yr % 4 == 0 && (yr % 100 != 0 || yr % 400 == 0);
 
}
 

	
 
/**
 
 * Converts a Date to a Year, Month & Day.
 
 * @param date the date to convert from
 
 * @param ymd  the year, month and day to write to
 
 */
 
void ConvertDateToYMD(Date date, YearMonthDay *ymd)
 
{
 
	uint yr  = date / (365 + 365 + 365 + 366);
 
	uint rem = date % (365 + 365 + 365 + 366);
 
	uint x;
 
	/*
 
	 * Year determination in multiple steps to account for leap
 
	 * years. First do the large steps, then the smaller ones.
 
	 */
 

	
 
	yr *= 4;
 
	/* There are 97 leap years in 400 years */
 
	Year yr = 400 * (date / (365 * 400 + 97));
 
	int rem = date % (365 * 400 + 97);
 
	uint16 x;
 

	
 
	if (rem >= 366) {
 
		rem--;
 
		do {
 
			rem -= 365;
 
	/* There are 24 leap years in 100 years */
 
	yr += 100 * (rem / (365 * 100 + 24));
 
	rem = rem % (365 * 100 + 24);
 

	
 
	/* There is 1 leap year every 4 years */
 
	yr += 4 * (rem / (365 * 4 + 1));
 
	rem = rem % (365 * 4 + 1);
 

	
 
	/* The last (max 3) years to account for; the first one
 
	 * can be, but is not necessarily a leap year */
 
	while (rem >= (IsLeapYear(yr) ? 366 : 365)) {
 
		rem -= IsLeapYear(yr) ? 366 : 365;
 
			yr++;
 
		} while (rem >= 365);
 
		if (rem >= 31 + 28) rem++;
 
	}
 

	
 
	ymd->year = BASE_YEAR + yr;
 
	/* Skip the 29th of February in non-leap years */
 
	if (!IsLeapYear(yr) && rem >= ACCUM_MAR - 1) rem++;
 

	
 
	ymd->year = yr;
 

	
 
	x = _month_date_from_year_day[rem];
 
	ymd->month = x >> 5;
 
	ymd->day = x & 0x1F;
 
}
 

	
 
/**
 
 * Converts a tupe of Year, Month and Day to a Date.
 
 * @param year  is a number between 0..?
 
 * @param year  is a number between 0..MAX_YEAR
 
 * @param month is a number between 0..11
 
 * @param day   is a number between 1..31
 
 */
 
Date ConvertYMDToDate(Year year, Month month, Day day)
 
{
 
	uint rem;
 
	uint yr = year - BASE_YEAR;
 

	
 
	/* day in the year */
 
	rem = _accum_days_for_month[month] + day - 1;
 
	/*
 
	 * Each passed leap year adds one day to the 'day count'.
 
	 *
 
	 * A special case for the year 0 as no year has been passed,
 
	 * but '(year - 1) / 4' does not yield '-1' to counteract the
 
	 * '+1' at the end of the formula as divisions round to zero.
 
	 */
 
	int nr_of_leap_years = (year == 0) ? 0 : ((year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + 1);
 

	
 
	/* remove feb 29 from year 1,2,3 */
 
	if (yr & 3) rem += (yr & 3) * 365 + (rem < 31 + 29);
 
	/* Day-offset in a leap year */
 
	int days = _accum_days_for_month[month] + day - 1;
 

	
 
	/* base date. */
 
	return (yr >> 2) * (365 + 365 + 365 + 366) + rem;
 
	/* Account for the missing of the 29th of February in non-leap years */
 
	if (!IsLeapYear(year) && days >= ACCUM_MAR) days--;
 

	
 
	return year * 365 + nr_of_leap_years + days;
 
}
 

	
 
/** Functions used by the IncreaseDate function */
 

	
 
extern void OnNewDay_Train(Vehicle *v);
 
extern void OnNewDay_RoadVeh(Vehicle *v);
 
@@ -249,18 +276,18 @@ void IncreaseDate(void)
 
	/* check if we reached end of the game */
 
	if (_cur_year == _patches.ending_year) {
 
			ShowEndGameChart();
 
	/* check if we reached the maximum year, decrement dates by a year */
 
	} else if (_cur_year == MAX_YEAR + 1) {
 
		Vehicle *v;
 
		uint days_this_year;
 

	
 
		_cur_year--;
 
		_date -= 365;
 
		FOR_ALL_VEHICLES(v) {
 
			v->date_of_last_service -= 365;
 
		}
 
		days_this_year = IsLeapYear(_cur_year) ? 366 : 365;
 
		_date -= days_this_year;
 
		FOR_ALL_VEHICLES(v) v->date_of_last_service -= days_this_year;
 

	
 
		/* Because the _date wraps here, and text-messages expire by game-days, we have to clean out
 
		 *  all of them if the date is set back, else those messages will hang for ever */
 
		InitTextMessage();
 
	}
 

	
date.h
Show inline comments
 
@@ -21,20 +21,22 @@
 
#define ORIGINAL_MAX_YEAR 2090
 

	
 
/**
 
 * The offset in days from the '_date == 0' till
 
 * 'ConvertYMDToDate(ORIGINAL_BASE_YEAR, 0, 1)'
 
 */
 
#define DAYS_TILL_ORIGINAL_BASE_YEAR 0
 
#define DAYS_TILL_ORIGINAL_BASE_YEAR (365 * ORIGINAL_BASE_YEAR + ORIGINAL_BASE_YEAR / 4 - ORIGINAL_BASE_YEAR / 100 + ORIGINAL_BASE_YEAR / 400)
 

	
 
/* Temporary value to make transition to full past 2090 easier/more clear */
 
#define BASE_YEAR 1920
 
#define BASE_YEAR 0
 

	
 
/* The absolute minimum & maximum years in OTTD */
 
#define MIN_YEAR 1920
 
#define MAX_YEAR 2090
 
#define MIN_YEAR 0
 
/* MAX_YEAR, nicely rounded value of the number of years that can
 
 * be encoded in a single 32 bits date, about 2^31 / 366 years. */
 
#define MAX_YEAR 5000000
 

	
 
/* Year and Date are defined elsewhere */
 
typedef uint8  Month;
 
typedef uint8  Day;
 
typedef uint16 DateFract;
 

	
engine.c
Show inline comments
 
@@ -603,14 +603,16 @@ static void Load_ERNW(void)
 
		er = GetEngineRenew(index);
 
		SlObject(er, _engine_renew_desc);
 
	}
 
}
 

	
 
static const SaveLoad _engine_desc[] = {
 
	SLE_VAR(Engine,intro_date,						SLE_UINT16),
 
	SLE_VAR(Engine,age,										SLE_UINT16),
 
	SLE_CONDVAR(Engine,intro_date,				SLE_FILE_U16 | SLE_VAR_I32,  0,  30),
 
	SLE_CONDVAR(Engine,intro_date,				SLE_INT32, 31, SL_MAX_VERSION),
 
	SLE_CONDVAR(Engine,age,								SLE_FILE_U16 | SLE_VAR_I32,  0,  30),
 
	SLE_CONDVAR(Engine,age,								SLE_INT32, 31, SL_MAX_VERSION),
 
	SLE_VAR(Engine,reliability,						SLE_UINT16),
 
	SLE_VAR(Engine,reliability_spd_dec,		SLE_UINT16),
 
	SLE_VAR(Engine,reliability_start,			SLE_UINT16),
 
	SLE_VAR(Engine,reliability_max,				SLE_UINT16),
 
	SLE_VAR(Engine,reliability_final,			SLE_UINT16),
 
	SLE_VAR(Engine,duration_phase_1,			SLE_UINT16),
engine.h
Show inline comments
 
@@ -73,14 +73,14 @@ typedef struct RoadVehicleInfo {
 
/** Information about a vehicle
 
  * @see table/engines.h
 
  */
 
typedef struct EngineInfo {
 
	Date base_intro;
 
	byte unk2;              ///< Carriages have the highest bit set in this one
 
	byte lifelength;
 
	byte base_life;
 
	Year lifelength;
 
	Year base_life;
 
	byte railtype:4;
 
	byte climates:4;
 
	uint32 refit_mask;
 
	byte refit_cost;
 
	byte misc_flags;
 
	byte callbackmask;
genworld_gui.c
Show inline comments
 
@@ -359,13 +359,13 @@ void GenerateLandscapeWndProc(Window *w,
 
			}
 
			_left_button_clicked = false;
 
			break;
 
		case 19: // Year text
 
			WP(w, def_d).data_3 = START_DATE_QUERY;
 
			SetDParam(0, _patches_newgame.starting_year);
 
			ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 5, 100, WC_GENERATE_LANDSCAPE, mode, CS_NUMERAL);
 
			ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, WC_GENERATE_LANDSCAPE, mode, CS_NUMERAL);
 
			break;
 
		case 21: case 23: // Snow line buttons
 
			/* Don't allow too fast scrolling */
 
			if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) {
 
				HandleButtonClick(w, e->click.widget);
 
				SetWindowDirty(w);
 
@@ -626,13 +626,13 @@ void CreateScenarioWndProc(Window *w, Wi
 
			}
 
			_left_button_clicked = false;
 
			break;
 
		case 15: // Year text
 
			WP(w, def_d).data_3 = START_DATE_QUERY;
 
			SetDParam(0, _patches_newgame.starting_year);
 
			ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 5, 100, WC_GENERATE_LANDSCAPE, GLWP_SCENARIO, CS_NUMERAL);
 
			ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, WC_GENERATE_LANDSCAPE, GLWP_SCENARIO, CS_NUMERAL);
 
			break;
 
		case 17: case 19: // Height level buttons
 
			/* Don't allow too fast scrolling */
 
			if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) {
 
				HandleButtonClick(w, e->click.widget);
 
				SetWindowDirty(w);
industry.h
Show inline comments
 
@@ -25,13 +25,13 @@ struct Industry {
 
	uint16 total_transported[2];
 
	uint16 counter;
 

	
 
	byte type;
 
	byte owner;
 
	byte color_map;
 
	byte last_prod_year;
 
	Year last_prod_year;
 
	byte was_cargo_delivered;
 

	
 
	uint16 index;
 
};
 

	
 
typedef struct IndustryTileTable {
industry_cmd.c
Show inline comments
 
@@ -1926,13 +1926,14 @@ static const SaveLoad _industry_desc[] =
 

	
 
	SLE_VAR(Industry,counter,					SLE_UINT16),
 

	
 
	SLE_VAR(Industry,type,						SLE_UINT8),
 
	SLE_VAR(Industry,owner,						SLE_UINT8),
 
	SLE_VAR(Industry,color_map,				SLE_UINT8),
 
	SLE_VAR(Industry,last_prod_year,	SLE_UINT8),
 
	SLE_CONDVAR(Industry, last_prod_year,	SLE_FILE_U8 | SLE_VAR_I32, 0, 30),
 
	SLE_CONDVAR(Industry, last_prod_year,	SLE_INT32, 31, SL_MAX_VERSION),
 
	SLE_VAR(Industry,was_cargo_delivered,SLE_UINT8),
 

	
 
	// reserve extra space in savegame here. (currently 32 bytes)
 
	SLE_CONDNULL(32, 2, SL_MAX_VERSION),
 

	
 
	SLE_END()
misc.c
Show inline comments
 
@@ -265,13 +265,14 @@ static void Load_NAME(void)
 
	while ((index = SlIterateArray()) != -1) {
 
		SlArray(_name_array[index],SlGetFieldLength(),SLE_UINT8);
 
	}
 
}
 

	
 
static const SaveLoadGlobVarList _date_desc[] = {
 
	    SLEG_VAR(_date,                  SLE_UINT16),
 
	SLEG_CONDVAR(_date,                  SLE_FILE_U16 | SLE_VAR_U32,  0,  30),
 
	SLEG_CONDVAR(_date,                  SLE_UINT32, 31, SL_MAX_VERSION),
 
	    SLEG_VAR(_date_fract,            SLE_UINT16),
 
	    SLEG_VAR(_tick_counter,          SLE_UINT16),
 
	    SLEG_VAR(_vehicle_id_ctr_day,    SLE_UINT16),
 
	    SLEG_VAR(_age_cargo_skip_counter,SLE_UINT8),
 
	    SLEG_VAR(_avail_aircraft,        SLE_UINT8),
 
	SLEG_CONDVAR(_cur_tileloop_tile,     SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
misc_gui.c
Show inline comments
 
@@ -1711,13 +1711,13 @@ static const CheatEntry _cheats_ui[] = {
 
	{SLE_BOOL,       0, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, NULL,                     0,  0},
 
	{SLE_BOOL,       0, STR_CHEAT_CROSSINGTUNNELS,&_cheats.crossing_tunnels.value,&_cheats.crossing_tunnels.been_used,NULL,                     0,  0},
 
	{SLE_BOOL,       0, STR_CHEAT_BUILD_IN_PAUSE, &_cheats.build_in_pause.value,  &_cheats.build_in_pause.been_used,  NULL,                     0,  0},
 
	{SLE_BOOL,       0, STR_CHEAT_NO_JETCRASH,    &_cheats.no_jetcrash.value,     &_cheats.no_jetcrash.been_used,     NULL,                     0,  0},
 
	{SLE_BOOL,       0, STR_CHEAT_SETUP_PROD,     &_cheats.setup_prod.value,      &_cheats.setup_prod.been_used,      NULL,                     0,  0},
 
	{SLE_UINT8,      0, STR_CHEAT_SWITCH_CLIMATE, &_opt.landscape,                &_cheats.switch_climate.been_used,  &ClickChangeClimateCheat,-1,  4},
 
	{SLE_UINT8,      0, STR_CHEAT_CHANGE_DATE,    &_cur_year,                     &_cheats.change_date.been_used,     &ClickChangeDateCheat,   -1,  1},
 
	{SLE_INT32,      0, STR_CHEAT_CHANGE_DATE,    &_cur_year,                     &_cheats.change_date.been_used,     &ClickChangeDateCheat,   -1,  1},
 
	{SLE_BOOL,       0, STR_CHEAT_ALLOW_CONVRAIL, &_cheats.elrail.value,          &_cheats.elrail.been_used,          &ClickAllowConvrail,      0,  0},
 
};
 

	
 

	
 
static const Widget _cheat_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,		STR_018B_CLOSE_WINDOW},
network.h
Show inline comments
 
@@ -86,13 +86,13 @@ typedef struct NetworkGameInfo {
 
	char rcon_password[NETWORK_PASSWORD_LENGTH];    // RCon password for the server. "" if rcon is disabled
 
} NetworkGameInfo;
 

	
 
typedef struct NetworkPlayerInfo {
 
	char company_name[NETWORK_NAME_LENGTH];					// Company name
 
	char password[NETWORK_PASSWORD_LENGTH];					// The password for the player
 
	byte inaugurated_year;													// What year the company started in
 
	Year inaugurated_year;													// What year the company started in
 
	int64 company_value;														// The company value
 
	int64 money;																		// The amount of money the company has
 
	int64 income;																		// How much did the company earned last year
 
	uint16 performance;															// What was his performance last month?
 
	byte use_password;													// 0: No password 1: There is a password
 
	uint16 num_vehicle[NETWORK_VEHICLE_TYPES];			// How many vehicles are there of this type?
network_client.c
Show inline comments
 
@@ -297,13 +297,13 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER
 

	
 
		current = NetworkRecv_uint8(MY_CLIENT, p);
 
		if (current >= MAX_PLAYERS)
 
			return NETWORK_RECV_STATUS_CLOSE_QUERY;
 

	
 
		NetworkRecv_string(MY_CLIENT, p, _network_player_info[current].company_name, sizeof(_network_player_info[current].company_name));
 
		_network_player_info[current].inaugurated_year = NetworkRecv_uint8(MY_CLIENT, p);
 
		_network_player_info[current].inaugurated_year = NetworkRecv_uint32(MY_CLIENT, p);
 
		_network_player_info[current].company_value = NetworkRecv_uint64(MY_CLIENT, p);
 
		_network_player_info[current].money = NetworkRecv_uint64(MY_CLIENT, p);
 
		_network_player_info[current].income = NetworkRecv_uint64(MY_CLIENT, p);
 
		_network_player_info[current].performance = NetworkRecv_uint16(MY_CLIENT, p);
 
		_network_player_info[current].use_password = NetworkRecv_uint8(MY_CLIENT, p);
 
		for (i = 0; i < NETWORK_VEHICLE_TYPES; i++)
network_data.h
Show inline comments
 
@@ -15,15 +15,15 @@
 

	
 
// The client-info-server-index is always 1
 
#define NETWORK_SERVER_INDEX 1
 
#define NETWORK_EMPTY_INDEX 0
 

	
 
// What version of game-info do we use?
 
#define NETWORK_GAME_INFO_VERSION 2
 
#define NETWORK_GAME_INFO_VERSION 3
 
// What version of company info is this?
 
#define NETWORK_COMPANY_INFO_VERSION 3
 
#define NETWORK_COMPANY_INFO_VERSION 4
 
// What version of master-server-protocol do we use?
 
#define NETWORK_MASTER_SERVER_VERSION 1
 

	
 
typedef uint16 PacketSize;
 

	
 
typedef struct Packet {
network_server.c
Show inline comments
 
@@ -92,13 +92,13 @@ DEF_SERVER_SEND_COMMAND(PACKET_SERVER_CO
 

	
 
		NetworkSend_uint8 (p, NETWORK_COMPANY_INFO_VERSION);
 
		NetworkSend_uint8 (p, active);
 
		NetworkSend_uint8 (p, player->index);
 

	
 
		NetworkSend_string(p, _network_player_info[player->index].company_name);
 
		NetworkSend_uint8 (p, _network_player_info[player->index].inaugurated_year);
 
		NetworkSend_uint32(p, _network_player_info[player->index].inaugurated_year);
 
		NetworkSend_uint64(p, _network_player_info[player->index].company_value);
 
		NetworkSend_uint64(p, _network_player_info[player->index].money);
 
		NetworkSend_uint64(p, _network_player_info[player->index].income);
 
		NetworkSend_uint16(p, _network_player_info[player->index].performance);
 

	
 
		/* Send 1 if there is a passord for the company else send 0 */
network_udp.c
Show inline comments
 
@@ -60,12 +60,16 @@ DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIEN
 
	_network_game_info.map_width = MapSizeX();
 
	_network_game_info.map_height = MapSizeY();
 
	_network_game_info.map_set = _opt.landscape;
 

	
 
	NetworkSend_uint8 (packet, NETWORK_GAME_INFO_VERSION);
 

	
 
	/* NETWORK_GAME_INFO_VERSION = 3 */
 
	NetworkSend_uint32(packet, _network_game_info.game_date);
 
	NetworkSend_uint32(packet, _network_game_info.start_date);
 

	
 
	/* NETWORK_GAME_INFO_VERSION = 2 */
 
	NetworkSend_uint8 (packet, _network_game_info.companies_max);
 
	NetworkSend_uint8 (packet, ActivePlayerCount());
 
	NetworkSend_uint8 (packet, _network_game_info.spectators_max);
 

	
 
	/* NETWORK_GAME_INFO_VERSION = 1 */
 
@@ -73,14 +77,12 @@ DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIEN
 
	NetworkSend_string(packet, _network_game_info.server_revision);
 
	NetworkSend_uint8 (packet, _network_game_info.server_lang);
 
	NetworkSend_uint8 (packet, _network_game_info.use_password);
 
	NetworkSend_uint8 (packet, _network_game_info.clients_max);
 
	NetworkSend_uint8 (packet, _network_game_info.clients_on);
 
	NetworkSend_uint8 (packet, NetworkSpectatorCount());
 
	NetworkSend_uint16(packet, _network_game_info.game_date);
 
	NetworkSend_uint16(packet, _network_game_info.start_date);
 
	NetworkSend_string(packet, _network_game_info.map_name);
 
	NetworkSend_uint16(packet, _network_game_info.map_width);
 
	NetworkSend_uint16(packet, _network_game_info.map_height);
 
	NetworkSend_uint8 (packet, _network_game_info.map_set);
 
	NetworkSend_uint8 (packet, _network_game_info.dedicated);
 

	
 
@@ -111,12 +113,16 @@ DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVE
 
	// Find next item
 
	item = NetworkGameListAddItem(inet_addr(inet_ntoa(client_addr->sin_addr)), ntohs(client_addr->sin_port));
 

	
 
	/* Please observer the order. In the order in which packets are sent
 
	 * they are to be received */
 
	switch (game_info_version) {
 
		case 3:
 
			item->info.game_date     = NetworkRecv_uint32(&_udp_cs, p);
 
			item->info.start_date    = NetworkRecv_uint32(&_udp_cs, p);
 
			/* Fallthrough */
 
		case 2:
 
			item->info.companies_max = NetworkRecv_uint8(&_udp_cs, p);
 
			item->info.companies_on = NetworkRecv_uint8(&_udp_cs, p);
 
			item->info.spectators_max = NetworkRecv_uint8(&_udp_cs, p);
 
			/* Fallthrough */
 
		case 1:
 
@@ -124,14 +130,16 @@ DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVE
 
			NetworkRecv_string(&_udp_cs, p, item->info.server_revision, sizeof(item->info.server_revision));
 
			item->info.server_lang   = NetworkRecv_uint8(&_udp_cs, p);
 
			item->info.use_password  = NetworkRecv_uint8(&_udp_cs, p);
 
			item->info.clients_max   = NetworkRecv_uint8(&_udp_cs, p);
 
			item->info.clients_on    = NetworkRecv_uint8(&_udp_cs, p);
 
			item->info.spectators_on = NetworkRecv_uint8(&_udp_cs, p);
 
			item->info.game_date     = NetworkRecv_uint16(&_udp_cs, p);
 
			item->info.start_date    = NetworkRecv_uint16(&_udp_cs, p);
 
			if (game_info_version < 3) { // 16 bits dates got scrapped and are read earlier
 
				item->info.game_date     = NetworkRecv_uint16(&_udp_cs, p) + DAYS_TILL_ORIGINAL_BASE_YEAR;
 
				item->info.start_date    = NetworkRecv_uint16(&_udp_cs, p) + DAYS_TILL_ORIGINAL_BASE_YEAR;
 
			}
 
			NetworkRecv_string(&_udp_cs, p, item->info.map_name, sizeof(item->info.map_name));
 
			item->info.map_width     = NetworkRecv_uint16(&_udp_cs, p);
 
			item->info.map_height    = NetworkRecv_uint16(&_udp_cs, p);
 
			item->info.map_set       = NetworkRecv_uint8(&_udp_cs, p);
 
			item->info.dedicated     = NetworkRecv_uint8(&_udp_cs, p);
 

	
 
@@ -182,13 +190,13 @@ DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIEN
 
		current++;
 

	
 
		/* Send the information */
 
		NetworkSend_uint8(packet, current);
 

	
 
		NetworkSend_string(packet, _network_player_info[player->index].company_name);
 
		NetworkSend_uint8 (packet, _network_player_info[player->index].inaugurated_year);
 
		NetworkSend_uint32(packet, _network_player_info[player->index].inaugurated_year);
 
		NetworkSend_uint64(packet, _network_player_info[player->index].company_value);
 
		NetworkSend_uint64(packet, _network_player_info[player->index].money);
 
		NetworkSend_uint64(packet, _network_player_info[player->index].income);
 
		NetworkSend_uint16(packet, _network_player_info[player->index].performance);
 

	
 
		/* Send 1 if there is a passord for the company else send 0 */
 
@@ -209,23 +217,23 @@ DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIEN
 
			ci = DEREF_CLIENT_INFO(cs);
 
			if (ci->client_playas - 1 == player->index) {
 
				/* The uint8 == 1 indicates that a client is following */
 
				NetworkSend_uint8(packet, 1);
 
				NetworkSend_string(packet, ci->client_name);
 
				NetworkSend_string(packet, ci->unique_id);
 
				NetworkSend_uint16(packet, ci->join_date);
 
				NetworkSend_uint32(packet, ci->join_date);
 
			}
 
		}
 
		/* Also check for the server itself */
 
		ci = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX);
 
		if (ci->client_playas - 1 == player->index) {
 
			/* The uint8 == 1 indicates that a client is following */
 
			NetworkSend_uint8(packet, 1);
 
			NetworkSend_string(packet, ci->client_name);
 
			NetworkSend_string(packet, ci->unique_id);
 
			NetworkSend_uint16(packet, ci->join_date);
 
			NetworkSend_uint32(packet, ci->join_date);
 
		}
 

	
 
		/* Indicates end of client list */
 
		NetworkSend_uint8(packet, 0);
 
	}
 

	
 
@@ -234,23 +242,23 @@ DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIEN
 
		ci = DEREF_CLIENT_INFO(cs);
 
		if (ci->client_playas - 1 > MAX_PLAYERS) {
 
			/* The uint8 == 1 indicates that a client is following */
 
			NetworkSend_uint8(packet, 1);
 
			NetworkSend_string(packet, ci->client_name);
 
			NetworkSend_string(packet, ci->unique_id);
 
			NetworkSend_uint16(packet, ci->join_date);
 
			NetworkSend_uint32(packet, ci->join_date);
 
		}
 
	}
 
	/* Also check for the server itself */
 
	ci = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX);
 
	if (ci->client_playas - 1 > MAX_PLAYERS) {
 
		/* The uint8 == 1 indicates that a client is following */
 
		NetworkSend_uint8(packet, 1);
 
		NetworkSend_string(packet, ci->client_name);
 
		NetworkSend_string(packet, ci->unique_id);
 
		NetworkSend_uint16(packet, ci->join_date);
 
		NetworkSend_uint32(packet, ci->join_date);
 
	}
 

	
 
	/* Indicates end of client list */
 
	NetworkSend_uint8(packet, 0);
 

	
 
	NetworkSendUDP_Packet(_udp_server_socket, packet, client_addr);
oldloader.c
Show inline comments
 
@@ -699,13 +699,13 @@ static const OldChunks industry_chunk[] 
 
	OCL_SVAR( OC_UINT16, Industry, total_transported[0] ),
 
	OCL_SVAR( OC_UINT16, Industry, total_transported[1] ),
 

	
 
	OCL_SVAR(  OC_UINT8, Industry, type ),
 
	OCL_SVAR(  OC_UINT8, Industry, owner ),
 
	OCL_SVAR(  OC_UINT8, Industry, color_map ),
 
	OCL_SVAR(  OC_UINT8, Industry, last_prod_year ),
 
	OCL_SVAR( OC_FILE_U8 | OC_VAR_I32, Industry, last_prod_year ),
 
	OCL_SVAR( OC_UINT16, Industry, counter ),
 
	OCL_SVAR(  OC_UINT8, Industry, was_cargo_delivered ),
 

	
 
	OCL_NULL( 9 ), // Random junk at the end of this chunk
 

	
 
	OCL_END()
 
@@ -992,13 +992,13 @@ static bool LoadOldPlayer(LoadgameState 
 
	Ps: this also means that if you had exact 893288 pounds, you will go back
 
	to 10000.. this is a very VERY small chance ;) */
 
	if (p->player_money == 893288)
 
		p->money64 = p->player_money = p->current_loan = 100000;
 

	
 
	_player_colors[num] = p->player_color;
 
	p->inaugurated_year = _old_inaugurated_year - BASE_YEAR;
 
	p->inaugurated_year = _old_inaugurated_year;
 
	if (p->location_of_house == 0xFFFF)
 
		p->location_of_house = 0;
 

	
 
	/* State 20 for AI players is sell vehicle. Since the AI struct is not
 
	 * really figured out as of now, p->ai.cur_veh; needed for 'sell vehicle'
 
	 * is NULL and the function will crash. To fix this, just change the state
 
@@ -1119,13 +1119,13 @@ static const OldChunks vehicle_chunk[] =
 
	OCL_VAR ( OC_UINT16,   1, &_old_order ),
 

	
 
	OCL_SVAR(  OC_UINT8, Vehicle, num_orders ),
 
	OCL_SVAR(  OC_UINT8, Vehicle, cur_order_index ),
 
	OCL_SVAR(   OC_TILE, Vehicle, dest_tile ),
 
	OCL_SVAR( OC_UINT16, Vehicle, load_unload_time_rem ),
 
	OCL_SVAR( OC_UINT16, Vehicle, date_of_last_service ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Vehicle, date_of_last_service ),
 
	OCL_SVAR( OC_UINT16, Vehicle, service_interval ),
 
	OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Vehicle, last_station_visited ),
 
	OCL_SVAR(  OC_UINT8, Vehicle, tick_counter ),
 
	OCL_SVAR( OC_UINT16, Vehicle, max_speed ),
 

	
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, Vehicle, x_pos ),
 
@@ -1153,15 +1153,15 @@ static const OldChunks vehicle_chunk[] =
 
	OCL_SVAR(  OC_UINT8, Vehicle, cargo_type ),
 
	OCL_SVAR( OC_UINT16, Vehicle, cargo_cap ),
 
	OCL_SVAR( OC_UINT16, Vehicle, cargo_count ),
 
	OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Vehicle, cargo_source ),
 
	OCL_SVAR(  OC_UINT8, Vehicle, cargo_days ),
 

	
 
	OCL_SVAR( OC_UINT16, Vehicle, age ),
 
	OCL_SVAR( OC_UINT16, Vehicle, max_age ),
 
	OCL_SVAR(  OC_UINT8, Vehicle, build_year ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Vehicle, age ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Vehicle, max_age ),
 
	OCL_SVAR( OC_FILE_U8 | OC_VAR_I32, Vehicle, build_year ),
 
	OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Vehicle, unitnumber ),
 

	
 
	OCL_SVAR( OC_UINT16, Vehicle, engine_type ),
 

	
 
	OCL_SVAR(  OC_UINT8, Vehicle, spritenum ),
 
	OCL_SVAR(  OC_UINT8, Vehicle, day_counter ),
 
@@ -1256,14 +1256,14 @@ static bool LoadOldSign(LoadgameState *l
 

	
 
	return LoadChunk(ls, GetSign(num), sign_chunk);
 
}
 

	
 
static const OldChunks engine_chunk[] = {
 
	OCL_SVAR( OC_UINT16, Engine, player_avail ),
 
	OCL_SVAR( OC_UINT16, Engine, intro_date ),
 
	OCL_SVAR( OC_UINT16, Engine, age ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Engine, intro_date ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Engine, age ),
 
	OCL_SVAR( OC_UINT16, Engine, reliability ),
 
	OCL_SVAR( OC_UINT16, Engine, reliability_spd_dec ),
 
	OCL_SVAR( OC_UINT16, Engine, reliability_start ),
 
	OCL_SVAR( OC_UINT16, Engine, reliability_max ),
 
	OCL_SVAR( OC_UINT16, Engine, reliability_final ),
 
	OCL_SVAR( OC_UINT16, Engine, duration_phase_1 ),
 
@@ -1372,13 +1372,13 @@ static bool LoadOldMapPart2(LoadgameStat
 
	return !ls->failed;
 
}
 

	
 
static uint32 _old_cur_town_ctr;
 
static const OldChunks main_chunk[] = {
 
	OCL_ASSERT( 0 ),
 
	OCL_VAR ( OC_UINT16,   1, &_date ),
 
	OCL_VAR ( OC_FILE_U16 | OC_VAR_U32, 1, &_date ),
 
	OCL_VAR ( OC_UINT16,   1, &_date_fract ),
 
	OCL_NULL( 600 ),            // TextEffects
 
	OCL_VAR ( OC_UINT32,   2, &_random_seeds[0] ),
 

	
 
	OCL_ASSERT( 0x264 ),
 
	OCL_CHUNK(  70, LoadOldTown ),
openttd.c
Show inline comments
 
@@ -790,13 +790,13 @@ void SwitchMode(int new_mode)
 
				if (p->is_active) {
 
					ChangeOwnershipOfPlayerItems(p->index, OWNER_SPECTATOR);
 
					p->is_active = false;
 
				}
 
			}
 
			_generating_world = false;
 
			_patches_newgame.starting_year = BASE_YEAR + _cur_year;
 
			_patches_newgame.starting_year = ORIGINAL_BASE_YEAR + _cur_year;
 
			// delete all stations owned by a player
 
			DeleteAllPlayerStations();
 
		} else {
 
			ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
 
		}
 
		break;
 
@@ -1436,8 +1436,32 @@ bool AfterLoadGame(void)
 
	YapfNotifyTrackLayoutChange(INVALID_TILE, INVALID_TRACK);
 

	
 
	FOR_ALL_PLAYERS(p) p->avail_railtypes = GetPlayerRailtypes(p->index);
 

	
 
	if (!CheckSavegameVersion(27)) AfterLoadStations();
 

	
 
	/* Time starts at 0 instead of 1920.
 
	 * Account for this in older games by adding an offset */
 
	if (CheckSavegameVersion(31)) {
 
		Station *st;
 
		Waypoint *wp;
 
		Engine *e;
 
		Player *player;
 
		Industry *i;
 
		Vehicle *v;
 

	
 
		_date += DAYS_TILL_ORIGINAL_BASE_YEAR;
 

	
 
		FOR_ALL_STATIONS(st)    st->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR;
 
		FOR_ALL_WAYPOINTS(wp)   wp->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR;
 
		FOR_ALL_ENGINES(e)      e->intro_date  += DAYS_TILL_ORIGINAL_BASE_YEAR;
 
		FOR_ALL_PLAYERS(player) player->inaugurated_year += ORIGINAL_BASE_YEAR;
 
		FOR_ALL_INDUSTRIES(i)   i->last_prod_year        += ORIGINAL_BASE_YEAR;
 

	
 
		FOR_ALL_VEHICLES(v) {
 
			v->date_of_last_service += DAYS_TILL_ORIGINAL_BASE_YEAR;
 
			v->build_year += ORIGINAL_BASE_YEAR;
 
		}
 
	}
 

	
 
	return true;
 
}
openttd.h
Show inline comments
 
@@ -51,17 +51,17 @@ typedef uint16 UnitID;   ///< All unitnu
 

	
 
typedef uint32 WindowNumber;
 
typedef byte WindowClass;
 

	
 
enum {
 
	INVALID_YEAR = -1,
 
	INVALID_DATE = (uint16)-1,
 
	INVALID_DATE = -1,
 
};
 

	
 
typedef int16  Year;
 
typedef uint16 Date;
 
typedef int32 Year;
 
typedef int32 Date;
 

	
 

	
 
enum GameModes {
 
	GM_MENU,
 
	GM_NORMAL,
 
	GM_EDITOR
player.h
Show inline comments
 
@@ -170,13 +170,13 @@ typedef struct Player {
 

	
 
	TileIndex location_of_house;
 
	TileIndex last_build_coordinate;
 

	
 
	PlayerID share_owners[4];
 

	
 
	byte inaugurated_year;
 
	Year inaugurated_year;
 
	byte num_valid_stat_ent;
 

	
 
	byte quarters_of_bankrupcy;
 
	byte bankrupt_asked; // which players were asked about buying it?
 
	int16 bankrupt_timeout;
 
	int32 bankrupt_value;
players.c
Show inline comments
 
@@ -487,13 +487,13 @@ Player *DoStartupNewPlayer(bool is_ai)
 

	
 
	p->is_ai = is_ai;
 
	p->ai.state = 5; /* AIS_WANT_NEW_ROUTE */
 
	p->share_owners[0] = p->share_owners[1] = p->share_owners[2] = p->share_owners[3] = OWNER_SPECTATOR;
 

	
 
	p->avail_railtypes = GetPlayerRailtypes(p->index);
 
	p->inaugurated_year = _cur_year - BASE_YEAR;
 
	p->inaugurated_year = _cur_year;
 
	p->face = Random();
 

	
 
	/* Engine renewal settings */
 
	p->engine_renew_list = NULL;
 
	p->renew_keep_length = false;
 
	p->engine_renew = false;
 
@@ -1129,13 +1129,14 @@ static const SaveLoad _player_desc[] = {
 

	
 
	SLE_VAR(Player,cargo_types,			SLE_UINT16),
 
	SLE_CONDVAR(Player, location_of_house,     SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
 
	SLE_CONDVAR(Player, location_of_house,     SLE_UINT32, 6, SL_MAX_VERSION),
 
	SLE_CONDVAR(Player, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
 
	SLE_CONDVAR(Player, last_build_coordinate, SLE_UINT32, 6, SL_MAX_VERSION),
 
	SLE_VAR(Player,inaugurated_year,SLE_UINT8),
 
	SLE_CONDVAR(Player, inaugurated_year,      SLE_FILE_U8  | SLE_VAR_I32, 0, 30),
 
	SLE_CONDVAR(Player, inaugurated_year,      SLE_INT32, 31, SL_MAX_VERSION),
 

	
 
	SLE_ARR(Player,share_owners,		SLE_UINT8, 4),
 

	
 
	SLE_VAR(Player,num_valid_stat_ent,SLE_UINT8),
 

	
 
	SLE_VAR(Player,quarters_of_bankrupcy,SLE_UINT8),
saveload.c
Show inline comments
 
@@ -27,13 +27,13 @@
 
#include "player.h"
 
#include "saveload.h"
 
#include "network.h"
 
#include "variables.h"
 
#include <setjmp.h>
 

	
 
const uint16 SAVEGAME_VERSION = 30;
 
const uint16 SAVEGAME_VERSION = 31;
 
uint16 _sl_version;       /// the major savegame version identifier
 
byte   _sl_minor_version; /// the minor savegame version, DO NOT USE!
 

	
 
typedef void WriterProc(uint len);
 
typedef uint ReaderProc(void);
 

	
settings.c
Show inline comments
 
@@ -1204,13 +1204,13 @@ static const SettingDescGlobVarList _net
 
	 SDTG_STR("server_name",           SLE_STRB, S, 0, _network_server_name,          NULL,        STR_NULL, NULL),
 
	 SDTG_STR("connect_to_ip",         SLE_STRB, S, 0, _network_default_ip,           NULL,        STR_NULL, NULL),
 
	 SDTG_STR("network_id",            SLE_STRB, S, 0, _network_unique_id,            NULL,        STR_NULL, NULL),
 
	SDTG_BOOL("autoclean_companies",             S, 0, _network_autoclean_companies,  false,       STR_NULL, NULL),
 
	 SDTG_VAR("autoclean_unprotected",SLE_UINT8, S, 0, _network_autoclean_unprotected,12, 0,  60,  STR_NULL, NULL),
 
	 SDTG_VAR("autoclean_protected",  SLE_UINT8, S, 0, _network_autoclean_protected,  36, 0, 180,  STR_NULL, NULL),
 
	 SDTG_VAR("restart_game_year",    SLE_INT16, S,D0, _network_restart_game_year,    0, MIN_YEAR, MAX_YEAR, STR_NULL, NULL),
 
	 SDTG_VAR("restart_game_year",    SLE_INT32, S,D0, _network_restart_game_year,    0, MIN_YEAR, MAX_YEAR, STR_NULL, NULL),
 
	 SDTG_END()
 
};
 
#endif /* ENABLE_NETWORK */
 

	
 
static const SettingDesc _gameopt_settings[] = {
 
	/* In version 4 a new difficulty setting has been added to the difficulty settings,
 
@@ -1318,15 +1318,15 @@ const SettingDesc _patch_settings[] = {
 
	SDT_BOOL(Patches, inflation,                  0, 0,  true,            STR_CONFIG_PATCHES_INFLATION,        NULL),
 
	SDT_BOOL(Patches, build_rawmaterial_ind,      0, 0, false,            STR_CONFIG_PATCHES_BUILDXTRAIND,     NULL),
 
	SDT_BOOL(Patches, multiple_industry_per_town, 0, 0, false,            STR_CONFIG_PATCHES_MULTIPINDTOWN,    NULL),
 
	SDT_BOOL(Patches, same_industry_close,        0, 0, false,            STR_CONFIG_PATCHES_SAMEINDCLOSE,     NULL),
 
	SDT_BOOL(Patches, bribe,                      0, 0,  true,            STR_CONFIG_PATCHES_BRIBE,            NULL),
 
	 SDT_VAR(Patches, snow_line_height,SLE_UINT8, 0, 0,     7,   2,   13, STR_CONFIG_PATCHES_SNOWLINE_HEIGHT,  NULL),
 
	 SDT_VAR(Patches, colored_news_year,SLE_FILE_U32 | SLE_VAR_I16, 0,NC,  2000, MIN_YEAR, MAX_YEAR, STR_CONFIG_PATCHES_COLORED_NEWS_YEAR,NULL),
 
	 SDT_VAR(Patches, starting_year,    SLE_FILE_U32 | SLE_VAR_I16, 0,NC,  1950, MIN_YEAR, MAX_YEAR, STR_CONFIG_PATCHES_STARTING_YEAR,NULL),
 
	 SDT_VAR(Patches, ending_year,      SLE_FILE_U32 | SLE_VAR_I16,0,NC|NO,2051, MIN_YEAR, MAX_YEAR, STR_CONFIG_PATCHES_ENDING_YEAR,  NULL),
 
	 SDT_VAR(Patches, colored_news_year,SLE_INT32, 0,NC,  2000, MIN_YEAR, MAX_YEAR, STR_CONFIG_PATCHES_COLORED_NEWS_YEAR,NULL),
 
	 SDT_VAR(Patches, starting_year,    SLE_INT32, 0,NC,  1950, MIN_YEAR, MAX_YEAR, STR_CONFIG_PATCHES_STARTING_YEAR,NULL),
 
	 SDT_VAR(Patches, ending_year,      SLE_INT32,0,NC|NO,2051, MIN_YEAR, MAX_YEAR, STR_CONFIG_PATCHES_ENDING_YEAR,  NULL),
 
	SDT_BOOL(Patches, smooth_economy,             0, 0,  true,            STR_CONFIG_PATCHES_SMOOTH_ECONOMY,   NULL),
 
	SDT_BOOL(Patches, allow_shares,               0, 0,  true,            STR_CONFIG_PATCHES_ALLOW_SHARES,     NULL),
 

	
 
	/***************************************************************************/
 
	/* AI section of the GUI-configure patches window */
 
	SDT_BOOL(Patches, ainew_active,           0, 0, false, STR_CONFIG_PATCHES_AINEW_ACTIVE,      AiNew_PatchActive_Warning),
 
@@ -1450,13 +1450,13 @@ const SettingDesc _patch_settings[] = {
 
	SDT_END()
 
};
 

	
 
static const SettingDesc _currency_settings[] = {
 
	SDT_VAR(CurrencySpec, rate,    SLE_UINT16, S, 0,  1, 0, 100, STR_NULL, NULL),
 
	SDT_CHR(CurrencySpec, separator,           S, 0,        ".", STR_NULL, NULL),
 
	SDT_VAR(CurrencySpec, to_euro, SLE_UINT16, S, 0,  0, 0,1000, STR_NULL, NULL),
 
	SDT_VAR(CurrencySpec, to_euro,  SLE_INT32, S, 0,  0, 0,1000, STR_NULL, NULL),
 
	SDT_STR(CurrencySpec, prefix,   SLE_STRBQ, S, 0,       NULL, STR_NULL, NULL),
 
	SDT_STR(CurrencySpec, suffix,   SLE_STRBQ, S, 0, " credits", STR_NULL, NULL),
 
	SDT_END()
 
};
 

	
 
/* Undefine for the shortcut macros above */
station_cmd.c
Show inline comments
 
@@ -3000,13 +3000,14 @@ static const SaveLoad _station_desc[] = 
 

	
 
	SLE_CONDNULL(2, 0, 25), /* Ex last-vehicle */
 
	SLE_CONDVAR(Station,last_vehicle_type,          SLE_UINT8 , 26, SL_MAX_VERSION),
 

	
 
	// Was custom station class and id
 
	SLE_CONDNULL(2, 3, 25),
 
	SLE_CONDVAR(Station,build_date,        SLE_UINT16, 3, SL_MAX_VERSION),
 
	SLE_CONDVAR(Station,build_date,        SLE_FILE_U16 | SLE_VAR_I32, 3, 30),
 
	SLE_CONDVAR(Station,build_date,        SLE_INT32, 31, SL_MAX_VERSION),
 

	
 
	SLE_CONDREF(Station,bus_stops,         REF_ROADSTOPS, 6, SL_MAX_VERSION),
 
	SLE_CONDREF(Station,truck_stops,       REF_ROADSTOPS, 6, SL_MAX_VERSION),
 

	
 
	/* Used by newstations for graphic variations */
 
	SLE_CONDVAR(Station,random_bits,       SLE_UINT16, 27, SL_MAX_VERSION),
vehicle.c
Show inline comments
 
@@ -2199,23 +2199,28 @@ const SaveLoad _common_veh_desc[] = {
 
	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, type),    SLE_UINT8,  5, SL_MAX_VERSION),
 
	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, flags),   SLE_UINT8,  5, SL_MAX_VERSION),
 
	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station), SLE_UINT16, 5, SL_MAX_VERSION),
 

	
 
	SLE_REF(Vehicle,orders,						REF_ORDER),
 

	
 
	SLE_VAR(Vehicle,age,							SLE_UINT16),
 
	SLE_VAR(Vehicle,max_age,					SLE_UINT16),
 
	SLE_VAR(Vehicle,date_of_last_service,SLE_UINT16),
 
	SLE_VAR(Vehicle,service_interval,	SLE_UINT16),
 
	SLE_CONDVAR(Vehicle,age,					SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
 
	SLE_CONDVAR(Vehicle,age,					SLE_INT32, 31, SL_MAX_VERSION),
 
	SLE_CONDVAR(Vehicle,max_age,			SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
 
	SLE_CONDVAR(Vehicle,max_age,			SLE_INT32, 31, SL_MAX_VERSION),
 
	SLE_CONDVAR(Vehicle,date_of_last_service,	SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
 
	SLE_CONDVAR(Vehicle,date_of_last_service,	SLE_INT32, 31, SL_MAX_VERSION),
 
	SLE_CONDVAR(Vehicle,service_interval,			SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
 
	SLE_CONDVAR(Vehicle,service_interval,			SLE_INT32, 31, SL_MAX_VERSION),
 
	SLE_VAR(Vehicle,reliability,			SLE_UINT16),
 
	SLE_VAR(Vehicle,reliability_spd_dec,SLE_UINT16),
 
	SLE_VAR(Vehicle,breakdown_ctr,		SLE_UINT8),
 
	SLE_VAR(Vehicle,breakdown_delay,	SLE_UINT8),
 
	SLE_VAR(Vehicle,breakdowns_since_last_service,	SLE_UINT8),
 
	SLE_VAR(Vehicle,breakdown_chance,	SLE_UINT8),
 
	SLE_VAR(Vehicle,build_year,				SLE_UINT8),
 
	SLE_CONDVAR(Vehicle,build_year,		SLE_FILE_U8 | SLE_VAR_I32, 0, 30),
 
	SLE_CONDVAR(Vehicle,build_year,		SLE_INT32, 31, SL_MAX_VERSION),
 

	
 
	SLE_VAR(Vehicle,load_unload_time_rem,	SLE_UINT16),
 

	
 
	SLE_VAR(Vehicle,profit_this_year,	SLE_INT32),
 
	SLE_VAR(Vehicle,profit_last_year,	SLE_INT32),
 
	SLE_VAR(Vehicle,value,						SLE_UINT32),
 
@@ -2359,14 +2364,14 @@ static const SaveLoad _disaster_desc[] =
 
	SLE_VAR(Vehicle,owner,						SLE_UINT8),
 
	SLE_VAR(Vehicle,vehstatus,				SLE_UINT8),
 
	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
 
	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station), SLE_UINT16, 5, SL_MAX_VERSION),
 

	
 
	SLE_VAR(Vehicle,cur_image,				SLE_UINT16),
 
	SLE_VAR(Vehicle,age,							SLE_UINT16),
 

	
 
	SLE_CONDVAR(Vehicle,age,					SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
 
	SLE_CONDVAR(Vehicle,age,					SLE_INT32, 31, SL_MAX_VERSION),
 
	SLE_VAR(Vehicle,tick_counter,			SLE_UINT8),
 

	
 
	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleDisaster,image_override),	SLE_UINT16),
 
	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleDisaster,unk2),						SLE_UINT16),
 

	
 
	// reserve extra space in savegame here. (currently 16 bytes)
vehicle.h
Show inline comments
 
@@ -205,23 +205,23 @@ struct Vehicle {
 
	int32 top_coord;
 
	int32 right_coord;
 
	int32 bottom_coord;
 
	VehicleID next_hash;
 

	
 
	// Related to age and service time
 
	uint16 age;				// Age in days
 
	uint16 max_age;		// Maximum age
 
	Date age;     // Age in days
 
	Date max_age; // Maximum age
 
	Date date_of_last_service;
 
	Date service_interval;
 
	uint16 reliability;
 
	uint16 reliability_spd_dec;
 
	byte breakdown_ctr;
 
	byte breakdown_delay;
 
	byte breakdowns_since_last_service;
 
	byte breakdown_chance;
 
	byte build_year;
 
	Year build_year;
 

	
 
	bool leave_depot_instantly;	// NOSAVE: stores if the vehicle needs to leave the depot it just entered. Used by autoreplace
 

	
 
	uint16 load_unload_time_rem;
 

	
 
	int32 profit_this_year;
waypoint.c
Show inline comments
 
@@ -405,13 +405,14 @@ static const SaveLoad _waypoint_desc[] =
 
	SLE_CONDVAR(Waypoint, xy, SLE_UINT32, 6, SL_MAX_VERSION),
 
	SLE_CONDVAR(Waypoint, town_index, SLE_UINT16, 12, SL_MAX_VERSION),
 
	SLE_CONDVAR(Waypoint, town_cn, SLE_UINT8, 12, SL_MAX_VERSION),
 
	SLE_VAR(Waypoint, string, SLE_UINT16),
 
	SLE_VAR(Waypoint, deleted, SLE_UINT8),
 

	
 
	SLE_CONDVAR(Waypoint, build_date, SLE_UINT16,  3, SL_MAX_VERSION),
 
	SLE_CONDVAR(Waypoint, build_date, SLE_FILE_U16 | SLE_VAR_I32, 3, 30),
 
	SLE_CONDVAR(Waypoint, build_date, SLE_INT32,  31, SL_MAX_VERSION),
 
	SLE_CONDVAR(Waypoint, localidx,   SLE_UINT8,   3, SL_MAX_VERSION),
 
	SLE_CONDVAR(Waypoint, grfid,      SLE_UINT32, 17, SL_MAX_VERSION),
 

	
 
	SLE_END()
 
};
 

	
0 comments (0 inline, 0 general)