mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-07 06:39:08 +00:00
(svn r1429) Change: bumped savegame to revision 5.
- Now orders are bigger - Now _map2 is official 16 bits
This commit is contained in:
parent
3be9515d84
commit
788f543bc3
@ -7,8 +7,8 @@
|
|||||||
#include "saveload.h"
|
#include "saveload.h"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
SAVEGAME_MAJOR_VERSION = 4,
|
SAVEGAME_MAJOR_VERSION = 5,
|
||||||
SAVEGAME_MINOR_VERSION = 4,
|
SAVEGAME_MINOR_VERSION = 0,
|
||||||
|
|
||||||
SAVEGAME_LOADABLE_VERSION = (SAVEGAME_MAJOR_VERSION << 8) + SAVEGAME_MINOR_VERSION
|
SAVEGAME_LOADABLE_VERSION = (SAVEGAME_MAJOR_VERSION << 8) + SAVEGAME_MINOR_VERSION
|
||||||
};
|
};
|
||||||
|
30
vehicle.c
30
vehicle.c
@ -2023,10 +2023,6 @@ static void Save_VEHS()
|
|||||||
// Write the vehicles
|
// Write the vehicles
|
||||||
FOR_ALL_VEHICLES(v) {
|
FOR_ALL_VEHICLES(v) {
|
||||||
if (v->type != 0) {
|
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);
|
SlSetArrayIndex(v->index);
|
||||||
SlObject(v, _veh_descs[v->type - 0x10]);
|
SlObject(v, _veh_descs[v->type - 0x10]);
|
||||||
}
|
}
|
||||||
@ -2128,7 +2124,7 @@ static void Load_CHKP()
|
|||||||
|
|
||||||
static void Save_ORDR()
|
static void Save_ORDR()
|
||||||
{
|
{
|
||||||
uint16 orders[lengthof(_order_array)];
|
uint32 orders[lengthof(_order_array)];
|
||||||
uint len = _ptr_to_next_order - _order_array;
|
uint len = _ptr_to_next_order - _order_array;
|
||||||
uint i;
|
uint i;
|
||||||
|
|
||||||
@ -2137,24 +2133,40 @@ static void Save_ORDR()
|
|||||||
for (i = 0; i < len; ++i)
|
for (i = 0; i < len; ++i)
|
||||||
orders[i] = PackOrder(&_order_array[i]);
|
orders[i] = PackOrder(&_order_array[i]);
|
||||||
|
|
||||||
SlArray(orders, len, SLE_UINT16);
|
SlArray(orders, len, SLE_UINT32);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Load_ORDR()
|
static void Load_ORDR()
|
||||||
{
|
{
|
||||||
uint16 orders[lengthof(_order_array)];
|
uint len = SlGetFieldLength();
|
||||||
uint len = SlGetFieldLength() >> 1;
|
|
||||||
uint i;
|
uint i;
|
||||||
|
|
||||||
|
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));
|
assert (len <= lengthof(orders));
|
||||||
|
|
||||||
_ptr_to_next_order = _order_array + len;
|
|
||||||
SlArray(orders, len, SLE_UINT16);
|
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)
|
for (i = 0; i < len; ++i)
|
||||||
_order_array[i] = UnpackOrder(orders[i]);
|
_order_array[i] = UnpackOrder(orders[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ptr_to_next_order = _order_array + len;
|
||||||
|
}
|
||||||
|
|
||||||
const ChunkHandler _veh_chunk_handlers[] = {
|
const ChunkHandler _veh_chunk_handlers[] = {
|
||||||
{ 'VEHS', Save_VEHS, Load_VEHS, CH_SPARSE_ARRAY},
|
{ 'VEHS', Save_VEHS, Load_VEHS, CH_SPARSE_ARRAY},
|
||||||
{ 'ORDR', Save_ORDR, Load_ORDR, CH_RIFF},
|
{ 'ORDR', Save_ORDR, Load_ORDR, CH_RIFF},
|
||||||
|
30
vehicle.h
30
vehicle.h
@ -4,27 +4,31 @@
|
|||||||
#include "vehicle_gui.h"
|
#include "vehicle_gui.h"
|
||||||
|
|
||||||
typedef struct Order {
|
typedef struct Order {
|
||||||
#ifdef TTD_LITTLE_ENDIAN /* XXX hack to avoid savegame revision bump */
|
uint8 type;
|
||||||
uint8 type:4;
|
uint8 flags;
|
||||||
uint8 flags:4;
|
|
||||||
#else
|
|
||||||
uint8 flags:4;
|
|
||||||
uint8 type:4;
|
|
||||||
#endif
|
|
||||||
uint16 station;
|
uint16 station;
|
||||||
} Order;
|
} 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 order;
|
||||||
order.type = (packed & 0x000f);
|
order.type = (packed & 0x000000FF);
|
||||||
order.flags = (packed & 0x00f0) >> 4,
|
order.flags = (packed & 0x0000FF00) >> 8;
|
||||||
order.station = (packed & 0xff00) >> 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;
|
return order;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user