Changeset - r8758:1f369db5ec03
[Not reviewed]
master
0 2 0
glx - 16 years ago 2008-03-28 02:10:25
glx@openttd.org
(svn r12454) -Fix (r12452): incorrect calculation for 'first vehicle in this chain of vehicles with the same ID' (thx DaleStan)
-Fix (r12452): wrong loading of random action 2 type 84 for non vehicle (though it shouldn't happen, but who knows ;))
2 files changed with 14 insertions and 7 deletions:
0 comments (0 inline, 0 general)
src/newgrf.cpp
Show inline comments
 
@@ -2592,8 +2592,8 @@ static void NewSpriteGroup(byte *buf, in
 
			group->type = SGT_RANDOMIZED;
 
			group->g.random.var_scope = HasBit(type, 1) ? VSG_SCOPE_PARENT : VSG_SCOPE_SELF;
 

	
 
			if (HasBit(type, 2) && feature <= GSF_AIRCRAFT) {
 
				group->g.random.var_scope = VSG_SCOPE_RELATIVE;
 
			if (HasBit(type, 2)) {
 
				if (feature <= GSF_AIRCRAFT) group->g.random.var_scope = VSG_SCOPE_RELATIVE;
 
				group->g.random.count = grf_load_byte(&buf);
 
			}
 

	
src/newgrf_engine.cpp
Show inline comments
 
@@ -405,7 +405,7 @@ static inline const Vehicle *GRV(const R
 
		case VSG_SCOPE_SELF: return object->u.vehicle.self;
 
		case VSG_SCOPE_PARENT: return object->u.vehicle.parent;
 
		case VSG_SCOPE_RELATIVE: {
 
			const Vehicle *v;
 
			const Vehicle *v = NULL;
 
			switch (GB(object->count, 6, 2)) {
 
				default: NOT_REACHED();
 
				case 0x00: // count back (away from the engine), starting at this vehicle
 
@@ -415,10 +415,17 @@ static inline const Vehicle *GRV(const R
 
				case 0x02: // count back, starting at the engine
 
					v = object->u.vehicle.parent;
 
					break;
 
				case 0x03: // count back, starting at the first vehicle in this chain of vehicles with the same ID, as for vehicle variable 41
 
					v = object->u.vehicle.parent;
 
					while (v != NULL && v->engine_type != object->u.vehicle.self->engine_type) v = v->Next();
 
					break;
 
				case 0x03: { // count back, starting at the first vehicle in this chain of vehicles with the same ID, as for vehicle variable 41
 
					const Vehicle *self = object->u.vehicle.self;
 
					for (const Vehicle *u = self->First(); u != self; u = u->Next()) {
 
						if (u->engine_type != self->engine_type) {
 
							v = NULL;
 
						} else {
 
							if (v == NULL) v = u;
 
						}
 
					}
 
					if (v == NULL) v = self;
 
				} break;
 
			}
 
			uint32 count = GB(object->count, 0, 4);
 
			if (count == 0) count = GetRegister(0x100);
0 comments (0 inline, 0 general)