Changeset - r941:6916898da19b
[Not reviewed]
master
0 3 0
truelight - 19 years ago 2005-01-08 12:47:26
truelight@openttd.org
(svn r1429) Change: bumped savegame to revision 5.
- Now orders are bigger
- Now _map2 is official 16 bits
3 files changed with 46 insertions and 30 deletions:
0 comments (0 inline, 0 general)
saveload.c
Show inline comments
 
@@ -7,8 +7,8 @@
 
#include "saveload.h"
 

	
 
enum {
 
	SAVEGAME_MAJOR_VERSION = 4,
 
	SAVEGAME_MINOR_VERSION = 4,
 
	SAVEGAME_MAJOR_VERSION = 5,
 
	SAVEGAME_MINOR_VERSION = 0,
 

	
 
	SAVEGAME_LOADABLE_VERSION = (SAVEGAME_MAJOR_VERSION << 8) + SAVEGAME_MINOR_VERSION
 
};
vehicle.c
Show inline comments
 
@@ -598,7 +598,7 @@ static bool CanFillVehicle_FullLoadAny(V
 
	uint32 full = 0, not_full = 0;
 

	
 
	//special handling of aircraft
 
	
 

	
 
	//if the aircraft carries passengers and is NOT full, then
 
	//continue loading, no matter how much mail is in
 
	if ((v->type == VEH_Aircraft) && (v->cargo_type == CT_PASSENGERS) && (v->cargo_cap != v->cargo_count)) {
 
@@ -1507,7 +1507,7 @@ int32 CmdReplaceVehicle(int x, int y, ui
 
				if it is a multiheaded engine (rear engine)
 
				(rvi->flags & RVI_MULTIHEAD && sprite - rvi2->image_index) is true if the engine is heading the other way, otherwise 0*/
 
				v->spritenum = rvi->image_index + (( rvi->flags & RVI_MULTIHEAD && sprite - rvi2->image_index) ? 1 : 0);
 
				
 

	
 
				// turn the last engine in a multiheaded train if needed
 
				if ( v->next == NULL && rvi->flags & RVI_MULTIHEAD && v->spritenum == rvi->image_index )
 
					v->spritenum++;
 
@@ -2023,10 +2023,6 @@ static void Save_VEHS()
 
	// Write the vehicles
 
	FOR_ALL_VEHICLES(v) {
 
		if (v->type != 0) {
 
			/* XXX - Here for now, because we did not bump the savegame to version 5 yet */
 
			if (_sl.version < 5 && v->last_station_visited == 0xFFFF)
 
				v->last_station_visited = 0xFF;
 

	
 
			SlSetArrayIndex(v->index);
 
			SlObject(v, _veh_descs[v->type - 0x10]);
 
		}
 
@@ -2128,7 +2124,7 @@ static void Load_CHKP()
 

	
 
static void Save_ORDR()
 
{
 
	uint16 orders[lengthof(_order_array)];
 
	uint32 orders[lengthof(_order_array)];
 
	uint len = _ptr_to_next_order - _order_array;
 
	uint i;
 

	
 
@@ -2137,22 +2133,38 @@ static void Save_ORDR()
 
	for (i = 0; i < len; ++i)
 
		orders[i] = PackOrder(&_order_array[i]);
 

	
 
	SlArray(orders, len, SLE_UINT16);
 
	SlArray(orders, len, SLE_UINT32);
 
}
 

	
 
static void Load_ORDR()
 
{
 
	uint16 orders[lengthof(_order_array)];
 
	uint len = SlGetFieldLength() >> 1;
 
	uint len = SlGetFieldLength();
 
	uint i;
 

	
 
	assert (len <= lengthof(orders));
 
	if (_sl.version < 5) {
 
		/* Older version had an other layout for orders.. convert them correctly */
 
		uint16 orders[lengthof(_order_array)];
 

	
 
		len /= sizeof(uint16);
 
		assert (len <= lengthof(orders));
 

	
 
		SlArray(orders, len, SLE_UINT16);
 

	
 
		for (i = 0; i < len; ++i)
 
			_order_array[i] = UnpackVersion4Order(orders[i]);
 
	} else {
 
		uint32 orders[lengthof(_order_array)];
 

	
 
		len /= sizeof(uint32);
 
		assert (len <= lengthof(orders));
 

	
 
		SlArray(orders, len, SLE_UINT32);
 

	
 
		for (i = 0; i < len; ++i)
 
			_order_array[i] = UnpackOrder(orders[i]);
 
	}
 

	
 
	_ptr_to_next_order = _order_array + len;
 
	SlArray(orders, len, SLE_UINT16);
 

	
 
	for (i = 0; i < len; ++i)
 
		_order_array[i] = UnpackOrder(orders[i]);
 
}
 

	
 
const ChunkHandler _veh_chunk_handlers[] = {
vehicle.h
Show inline comments
 
@@ -4,27 +4,31 @@
 
#include "vehicle_gui.h"
 

	
 
typedef struct Order {
 
#ifdef TTD_LITTLE_ENDIAN /* XXX hack to avoid savegame revision bump */
 
	uint8 type:4;
 
	uint8 flags:4;
 
#else
 
	uint8 flags:4;
 
	uint8 type:4;
 
#endif
 
	uint8 type;
 
	uint8 flags;
 
	uint16 station;
 
} Order;
 

	
 
static inline uint16 PackOrder(const Order *order)
 
static inline uint32 PackOrder(const Order *order)
 
{
 
	return order->station << 8 | order->flags << 4 | order->type;
 
	return order->station << 16 | order->flags << 8 | order->type;
 
}
 

	
 
static inline Order UnpackOrder(uint16 packed)
 
static inline Order UnpackOrder(uint32 packed)
 
{
 
	Order order;
 
	order.type    = (packed & 0x000f);
 
	order.flags   = (packed & 0x00f0) >> 4,
 
	order.station = (packed & 0xff00) >> 8;
 
	order.type    = (packed & 0x000000FF);
 
	order.flags   = (packed & 0x0000FF00) >> 8;
 
	order.station = (packed & 0xFFFF0000) >> 16;
 
	return order;
 
}
 

	
 
static inline Order UnpackVersion4Order(uint16 packed)
 
{
 
	Order order;
 
	order.type    = (packed & 0x000F);
 
	order.flags   = (packed & 0x00F0) >> 4;
 
	order.station = (packed & 0xFF00) >> 8;
 
	return order;
 
}
 

	
0 comments (0 inline, 0 general)