Changeset - r12189:24885a3e6cdf
[Not reviewed]
master
0 3 0
yexo - 15 years ago 2009-06-21 10:11:04
yexo@openttd.org
(svn r16613) -Fix [NewGRF]: some of the var action 2 80+ variables contained wrong results due to OpenTTD codechanges
3 files changed with 44 insertions and 7 deletions:
0 comments (0 inline, 0 general)
src/newgrf_engine.cpp
Show inline comments
 
@@ -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 R
 

	
 
	/* 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;
src/order_base.h
Show inline comments
 
@@ -233,6 +233,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.
 
	 */
src/order_cmd.cpp
Show inline comments
 
@@ -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);
0 comments (0 inline, 0 general)