@ -1372,6 +1372,32 @@ void CheckCaches(bool force_check, std::function<void(const char *)> log)
} \
}
auto output_veh_info = [ & ] ( char * & p , const Vehicle * u , const Vehicle * v , uint length ) {
p + = seprintf ( p , lastof ( cclog_buffer ) , " : type %i, vehicle %i (%i), company %i, unit number %i, wagon %i, engine: " ,
( int ) u - > type , u - > index , v - > index , ( int ) u - > owner , v - > unitnumber , length ) ;
SetDParam ( 0 , u - > engine_type ) ;
p = GetString ( p , STR_ENGINE_NAME , lastof ( cclog_buffer ) ) ;
uint32 grfid = u - > GetGRFID ( ) ;
if ( grfid ) {
p + = seprintf ( p , lastof ( cclog_buffer ) , " , GRF: %08X " , BSWAP32 ( grfid ) ) ;
GRFConfig * grfconfig = GetGRFConfig ( grfid ) ;
if ( grfconfig ) {
p + = seprintf ( p , lastof ( cclog_buffer ) , " , %s, %s " , grfconfig - > GetName ( ) , grfconfig - > filename ) ;
}
}
} ;
# define CCLOGV(...) { \
char * p = cclog_buffer + seprintf ( cclog_buffer , lastof ( cclog_buffer ) , __VA_ARGS__ ) ; \
output_veh_info ( p , u , v , length ) ; \
DEBUG ( desync , 0 , " %s " , cclog_buffer ) ; \
if ( log ) { \
log ( cclog_buffer ) ; \
} else { \
LogDesyncMsg ( cclog_buffer ) ; \
} \
}
/* Check the town caches. */
std : : vector < TownCache > old_town_caches ;
std : : vector < CargoTypes > old_town_cargo_accepted_totals ;
@ -1506,13 +1532,13 @@ void CheckCaches(bool force_check, std::function<void(const char *)> log)
uint length = 0 ;
for ( const Vehicle * u = v ; u ! = nullptr ; u = u - > Next ( ) ) {
if ( u - > IsGroundVehicle ( ) & & ( HasBit ( u - > GetGroundVehicleFlags ( ) , GVF_GOINGUP_BIT ) | | HasBit ( u - > GetGroundVehicleFlags ( ) , GVF_GOINGDOWN_BIT ) ) & & u - > GetGroundVehicleCache ( ) - > cached_slope_resistance & & HasBit ( v - > vcache . cached_veh_flags , VCF_GV_ZERO_SLOPE_RESIST ) ) {
CCLOG ( " VCF_GV_ZERO_SLOPE_RESIST set incorrectly (1) : type %i, vehicle %i, company %i, unit number %i, wagon %i " , ( int ) v - > type , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " VCF_GV_ZERO_SLOPE_RESIST set incorrectly (1) " ) ;
}
if ( u - > type = = VEH_TRAIN & & u - > breakdown_ctr ! = 0 & & ! HasBit ( Train : : From ( v ) - > flags , VRF_CONSIST_BREAKDOWN ) ) {
CCLOG ( " VRF_CONSIST_BREAKDOWN incorrectly not set : type %i, vehicle %i, company %i, unit number %i, wagon %i " , ( int ) v - > type , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " VRF_CONSIST_BREAKDOWN incorrectly not set " ) ;
}
if ( u - > type = = VEH_TRAIN & & ( ( Train : : From ( u ) - > track & TRACK_BIT_WORMHOLE & & ! ( Train : : From ( u ) - > vehstatus & VS_HIDDEN ) ) | | Train : : From ( u ) - > track = = TRACK_BIT_DEPOT ) & & ! HasBit ( Train : : From ( v ) - > flags , VRF_CONSIST_SPEED_REDUCTION ) ) {
CCLOG ( " VRF_CONSIST_SPEED_REDUCTION incorrectly not set : type %i, vehicle %i, company %i, unit number %i, wagon %i " , ( int ) v - > type , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " VRF_CONSIST_SPEED_REDUCTION incorrectly not set " ) ;
}
length + + ;
}
@ -1566,70 +1592,69 @@ void CheckCaches(bool force_check, std::function<void(const char *)> log)
for ( const Vehicle * u = v ; u ! = nullptr ; u = u - > Next ( ) ) {
FillNewGRFVehicleCache ( u ) ;
if ( memcmp ( & grf_cache [ length ] , & u - > grf_cache , sizeof ( NewGRFCache ) ) ! = 0 ) {
CCLOG ( " newgrf cache mismatch : type %i, vehicle %i, company %i, unit number %i, wagon %i " , ( int ) v - > type , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " newgrf cache mismatch " ) ;
}
if ( veh_cache [ length ] . cached_max_speed ! = u - > vcache . cached_max_speed | | veh_cache [ length ] . cached_cargo_age_period ! = u - > vcache . cached_cargo_age_period | |
veh_cache [ length ] . cached_vis_effect ! = u - > vcache . cached_vis_effect | | HasBit ( veh_cache [ length ] . cached_veh_flags ^ u - > vcache . cached_veh_flags , VCF_LAST_VISUAL_EFFECT ) ) {
CCLOG ( " vehicle cache mismatch: %c%c%c%c , type %i, vehicle %i, company %i, unit number %i, wagon %i " ,
CCLOG V ( " vehicle cache mismatch: %c%c%c%c " ,
veh_cache [ length ] . cached_max_speed ! = u - > vcache . cached_max_speed ? ' m ' : ' - ' ,
veh_cache [ length ] . cached_cargo_age_period ! = u - > vcache . cached_cargo_age_period ? ' c ' : ' - ' ,
veh_cache [ length ] . cached_vis_effect ! = u - > vcache . cached_vis_effect ? ' v ' : ' - ' ,
HasBit ( veh_cache [ length ] . cached_veh_flags ^ u - > vcache . cached_veh_flags , VCF_LAST_VISUAL_EFFECT ) ? ' l ' : ' - ' ,
( int ) v - > type , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
HasBit ( veh_cache [ length ] . cached_veh_flags ^ u - > vcache . cached_veh_flags , VCF_LAST_VISUAL_EFFECT ) ? ' l ' : ' - ' ) ;
}
if ( u - > IsGroundVehicle ( ) & & ( HasBit ( u - > GetGroundVehicleFlags ( ) , GVF_GOINGUP_BIT ) | | HasBit ( u - > GetGroundVehicleFlags ( ) , GVF_GOINGDOWN_BIT ) ) & & u - > GetGroundVehicleCache ( ) - > cached_slope_resistance & & HasBit ( v - > vcache . cached_veh_flags , VCF_GV_ZERO_SLOPE_RESIST ) ) {
CCLOG ( " VCF_GV_ZERO_SLOPE_RESIST set incorrectly (2) : type %i, vehicle %i, company %i, unit number %i, wagon %i " , ( int ) v - > type , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " VCF_GV_ZERO_SLOPE_RESIST set incorrectly (2) " ) ;
}
if ( veh_old [ length ] - > acceleration ! = u - > acceleration ) {
CCLOG ( " acceleration mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " acceleration mismatch " ) ;
}
if ( veh_old [ length ] - > breakdown_chance ! = u - > breakdown_chance ) {
CCLOG ( " breakdown_chance mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " breakdown_chance mismatch " ) ;
}
if ( veh_old [ length ] - > breakdown_ctr ! = u - > breakdown_ctr ) {
CCLOG ( " breakdown_ctr mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " breakdown_ctr mismatch " ) ;
}
if ( veh_old [ length ] - > breakdown_delay ! = u - > breakdown_delay ) {
CCLOG ( " breakdown_delay mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " breakdown_delay mismatch " ) ;
}
if ( veh_old [ length ] - > breakdowns_since_last_service ! = u - > breakdowns_since_last_service ) {
CCLOG ( " breakdowns_since_last_service mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " breakdowns_since_last_service mismatch " ) ;
}
if ( veh_old [ length ] - > breakdown_severity ! = u - > breakdown_severity ) {
CCLOG ( " breakdown_severity mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " breakdown_severity mismatch " ) ;
}
if ( veh_old [ length ] - > breakdown_type ! = u - > breakdown_type ) {
CCLOG ( " breakdown_type mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " breakdown_type mismatch " ) ;
}
if ( veh_old [ length ] - > vehicle_flags ! = u - > vehicle_flags ) {
CCLOG ( " vehicle_flags mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " vehicle_flags mismatch " ) ;
}
switch ( u - > type ) {
case VEH_TRAIN :
if ( memcmp ( & gro_cache [ length ] , & Train : : From ( u ) - > gcache , sizeof ( GroundVehicleCache ) ) ! = 0 ) {
CCLOG ( " train ground vehicle cache mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " train ground vehicle cache mismatch " ) ;
}
if ( memcmp ( & tra_cache [ length ] , & Train : : From ( u ) - > tcache , sizeof ( TrainCache ) ) ! = 0 ) {
CCLOG ( " train cache mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " train cache mismatch " ) ;
}
if ( Train : : From ( veh_old [ length ] ) - > railtype ! = Train : : From ( u ) - > railtype ) {
CCLOG ( " railtype mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " railtype mismatch " ) ;
}
if ( Train : : From ( veh_old [ length ] ) - > compatible_railtypes ! = Train : : From ( u ) - > compatible_railtypes ) {
CCLOG ( " compatible_railtypes mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " compatible_railtypes mismatch " ) ;
}
if ( Train : : From ( veh_old [ length ] ) - > flags ! = Train : : From ( u ) - > flags ) {
CCLOG ( " flags mismatch: vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " train flags mismatch" ) ;
}
break ;
case VEH_ROAD :
if ( memcmp ( & gro_cache [ length ] , & RoadVehicle : : From ( u ) - > gcache , sizeof ( GroundVehicleCache ) ) ! = 0 ) {
CCLOG ( " road vehicle ground vehicle cache mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " road vehicle ground vehicle cache mismatch " ) ;
}
break ;
case VEH_AIRCRAFT :
if ( memcmp ( & air_cache [ length ] , & Aircraft : : From ( u ) - > acache , sizeof ( AircraftCache ) ) ! = 0 ) {
CCLOG ( " Aircraft vehicle cache mismatch : vehicle %i, company %i, unit number %i, wagon %i " , v - > index , ( int ) v - > owner , v - > unitnumber , length ) ;
CCLOG V ( " Aircraft vehicle cache mismatch " ) ;
}
break ;
default :
@ -1702,6 +1727,7 @@ void CheckCaches(bool force_check, std::function<void(const char *)> log)
CCLOG ( " Order destination refcount map not valid " ) ;
}
# undef CCLOGV
# undef CCLOG
}