mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 22:28:56 +00:00
(svn r16613) -Fix [NewGRF]: some of the var action 2 80+ variables contained wrong results due to OpenTTD codechanges
This commit is contained in:
parent
41c8baa7dc
commit
548a605263
@ -130,10 +130,18 @@ uint32 GetEngineGRFID(EngineID engine)
|
||||
|
||||
static int MapOldSubType(const Vehicle *v)
|
||||
{
|
||||
if (v->type != VEH_TRAIN) return v->subtype;
|
||||
if (IsTrainEngine(v)) return 0;
|
||||
if (IsFreeWagon(v)) return 4;
|
||||
return 2;
|
||||
switch (v->type) {
|
||||
case VEH_TRAIN:
|
||||
if (IsTrainEngine(v)) return 0;
|
||||
if (IsFreeWagon(v)) return 4;
|
||||
return 2;
|
||||
case VEH_ROAD:
|
||||
case VEH_SHIP: return 0;
|
||||
case VEH_AIRCRAFT:
|
||||
case VEH_DISASTER: return v->subtype;
|
||||
case VEH_EFFECT: return v->subtype << 1;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -687,12 +695,12 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by
|
||||
|
||||
/* General vehicle properties */
|
||||
switch (variable - 0x80) {
|
||||
case 0x00: return v->type;
|
||||
case 0x00: return v->type + 2;
|
||||
case 0x01: return MapOldSubType(v);
|
||||
case 0x04: return v->index;
|
||||
case 0x05: return GB(v->index, 8, 8);
|
||||
case 0x0A: return v->current_order.Pack();
|
||||
case 0x0B: return GB(v->current_order.Pack(), 8, 8);
|
||||
case 0x0A: return v->current_order.MapOldOrder();
|
||||
case 0x0B: return v->current_order.GetDestination();
|
||||
case 0x0C: return v->GetNumOrders();
|
||||
case 0x0D: return v->cur_order_index;
|
||||
case 0x10: return v->load_unload_time_rem;
|
||||
|
@ -232,6 +232,13 @@ public:
|
||||
*/
|
||||
uint32 Pack() const;
|
||||
|
||||
/**
|
||||
* Pack this order into a 16 bits integer as close to the TTD
|
||||
* representation as possible.
|
||||
* @return the TTD-like packed representation.
|
||||
*/
|
||||
uint16 MapOldOrder() const;
|
||||
|
||||
/**
|
||||
* Converts this order from an old savegame's version;
|
||||
* it moves all bits to the new location.
|
||||
|
@ -129,6 +129,28 @@ uint32 Order::Pack() const
|
||||
return this->dest << 16 | this->flags << 8 | this->type;
|
||||
}
|
||||
|
||||
uint16 Order::MapOldOrder() const
|
||||
{
|
||||
uint16 order = this->GetType();
|
||||
switch (this->type) {
|
||||
case OT_GOTO_STATION:
|
||||
if (this->GetUnloadType() & OUFB_UNLOAD) SetBit(order, 5);
|
||||
if (this->GetLoadType() & OLFB_FULL_LOAD) SetBit(order, 6);
|
||||
if (this->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) SetBit(order, 7);
|
||||
order |= GB(this->GetDestination(), 0, 8) << 8;
|
||||
break;
|
||||
case OT_GOTO_DEPOT:
|
||||
if (!(this->GetDepotOrderType() & ODTFB_PART_OF_ORDERS)) SetBit(order, 6);
|
||||
SetBit(order, 7);
|
||||
order |= GB(this->GetDestination(), 0, 8) << 8;
|
||||
break;
|
||||
case OT_LOADING:
|
||||
if (this->GetLoadType() & OLFB_FULL_LOAD) SetBit(order, 6);
|
||||
break;
|
||||
}
|
||||
return order;
|
||||
}
|
||||
|
||||
Order::Order(uint32 packed)
|
||||
{
|
||||
this->type = (OrderType)GB(packed, 0, 8);
|
||||
|
Loading…
Reference in New Issue
Block a user