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 |