src/newgrf_engine.cpp
branchNewGRF_ports
changeset 10991 d8811e327d12
parent 10731 67db0d431d5e
equal deleted inserted replaced
10731:67db0d431d5e 10991:d8811e327d12
   464 		/* Vehicle does not exist, so we're in a purchase list */
   464 		/* Vehicle does not exist, so we're in a purchase list */
   465 		switch (variable) {
   465 		switch (variable) {
   466 			case 0x43: return _current_player | (LiveryHelper(object->u.vehicle.self_type, NULL) << 24); // Owner information
   466 			case 0x43: return _current_player | (LiveryHelper(object->u.vehicle.self_type, NULL) << 24); // Owner information
   467 			case 0x46: return 0;               // Motion counter
   467 			case 0x46: return 0;               // Motion counter
   468 			case 0x48: return GetEngine(object->u.vehicle.self_type)->flags; // Vehicle Type Info
   468 			case 0x48: return GetEngine(object->u.vehicle.self_type)->flags; // Vehicle Type Info
       
   469 			case 0x49: return _cur_year; // 'Long' format build year
   469 			case 0xC4: return Clamp(_cur_year, ORIGINAL_BASE_YEAR, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR; // Build year
   470 			case 0xC4: return Clamp(_cur_year, ORIGINAL_BASE_YEAR, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR; // Build year
   470 			case 0xDA: return INVALID_VEHICLE; // Next vehicle
   471 			case 0xDA: return INVALID_VEHICLE; // Next vehicle
   471 			case 0x7F: return GetGRFParameter(object->u.vehicle.self_type, parameter); // Read GRF parameter
   472 			case 0x7F: return GetGRFParameter(object->u.vehicle.self_type, parameter); // Read GRF parameter
   472 		}
   473 		}
   473 
   474 
   598 
   599 
   599 			return (cs->classes << 16) | (cs->weight << 8) | GetEngineGRF(v->engine_type)->cargo_map[v->cargo_type];
   600 			return (cs->classes << 16) | (cs->weight << 8) | GetEngineGRF(v->engine_type)->cargo_map[v->cargo_type];
   600 		}
   601 		}
   601 
   602 
   602 		case 0x48: return GetEngine(v->engine_type)->flags; // Vehicle Type Info
   603 		case 0x48: return GetEngine(v->engine_type)->flags; // Vehicle Type Info
       
   604 		case 0x49: return v->build_year;
   603 
   605 
   604 		/* Variables which use the parameter */
   606 		/* Variables which use the parameter */
   605 		case 0x60: // Count consist's engine ID occurance
   607 		case 0x60: // Count consist's engine ID occurance
   606 			//EngineID engine = GetNewEngineID(GetEngineGRF(v->engine_type), v->type, parameter);
   608 			//EngineID engine = GetNewEngineID(GetEngineGRF(v->engine_type), v->type, parameter);
   607 			if (v->type != VEH_TRAIN) return GetEngine(v->engine_type)->internal_id == parameter;
   609 			if (v->type != VEH_TRAIN) return GetEngine(v->engine_type)->internal_id == parameter;
   860 	ResolverObject object;
   862 	ResolverObject object;
   861 
   863 
   862 	NewVehicleResolver(&object, engine, v);
   864 	NewVehicleResolver(&object, engine, v);
   863 
   865 
   864 	group = Resolve(GetVehicleSpriteGroup(engine, v), &object);
   866 	group = Resolve(GetVehicleSpriteGroup(engine, v), &object);
   865 	if (group == NULL || group->type != SGT_RESULT) return 0;
   867 	if (group == NULL || group->type != SGT_RESULT || group->g.result.num_sprites == 0) return 0;
   866 
   868 
   867 	return group->g.result.sprite + (direction % group->g.result.num_sprites);
   869 	return group->g.result.sprite + (direction % group->g.result.num_sprites);
   868 }
   870 }
   869 
   871 
   870 
   872 
   871 SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v, bool info_view)
   873 SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v, bool info_view)
   872 {
   874 {
   873 	#if !defined(NDEBUG) || defined(WITH_ASSERT)
       
   874 	const Engine *e = GetEngine(engine);
   875 	const Engine *e = GetEngine(engine);
   875 	#endif /* !defined(NDEBUG) || defined(WITH_ASSERT) */
   876 
   876 
   877 	/* Only valid for helicopters */
   877 	const SpriteGroup *group;
   878 	assert(e->type == VEH_AIRCRAFT);
       
   879 	assert(!(e->u.air.subtype & AIR_CTOL));
       
   880 
   878 	ResolverObject object;
   881 	ResolverObject object;
   879 
   882 
   880 	assert(e->type == VEH_AIRCRAFT);
       
   881 
       
   882 	/* Only valid for helicopters */
       
   883 	assert(!(e->u.air.subtype & AIR_CTOL));
       
   884 
       
   885 	NewVehicleResolver(&object, engine, v);
   883 	NewVehicleResolver(&object, engine, v);
   886 
   884 
   887 	object.info_view = info_view;
   885 	object.info_view = info_view;
   888 
   886 
   889 	group = GetWagonOverrideSpriteSet(engine, CT_DEFAULT, engine);
   887 	const SpriteGroup *group = GetWagonOverrideSpriteSet(engine, CT_DEFAULT, engine);
   890 	group = Resolve(group, &object);
   888 	group = Resolve(group, &object);
   891 
   889 
   892 	if (group == NULL || group->type != SGT_RESULT) return 0;
   890 	if (group == NULL || group->type != SGT_RESULT || group->g.result.num_sprites == 0) return 0;
   893 
   891 
   894 	if (v == NULL) return group->g.result.sprite;
   892 	if (v == NULL) return group->g.result.sprite;
   895 
   893 
   896 	return group->g.result.sprite + (info_view ? 0 : (v->Next()->Next()->u.air.state % group->g.result.num_sprites));
   894 	return group->g.result.sprite + (info_view ? 0 : (v->Next()->Next()->u.air.state % group->g.result.num_sprites));
   897 }
   895 }
  1105 		Engine *target_e = NULL;
  1103 		Engine *target_e = NULL;
  1106 
  1104 
  1107 		/* Populate map with current list positions */
  1105 		/* Populate map with current list positions */
  1108 		Engine *e;
  1106 		Engine *e;
  1109 		FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
  1107 		FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
  1110 			if (!_settings.vehicle.dynamic_engines || e->grffile == source_e->grffile) {
  1108 			if (!_settings_game.vehicle.dynamic_engines || e->grffile == source_e->grffile) {
  1111 				if (e->internal_id == target) target_e = e;
  1109 				if (e->internal_id == target) target_e = e;
  1112 				lptr_map[e->list_position] = e;
  1110 				lptr_map[e->list_position] = e;
  1113 			}
  1111 			}
  1114 		}
  1112 		}
  1115 
  1113