(svn r19552) [1.0] -Backport from trunk:

- Fix: Prevent drawing industries disabled at the smallmap as land tiles when they are built on water (r19523)
- Fix: Tunnels, bridges and roadstops are build with only one roadtype (r19506)
- Fix: [NewGRF] During NewGRF loading, store rail type labels in temporary data and process after loading has finished. This avoids deactivated rail vehicles being reactivated if the climate property is set after the rail type property (r19502)
- Fix: Keep number padding intact when cloning vehicle names [FS#3710] (r19498)
This commit is contained in:
rubidium
2010-04-03 19:57:23 +00:00
parent 3106bb110e
commit a9163d0503
7 changed files with 38 additions and 29 deletions
+23 -12
View File
@@ -186,6 +186,7 @@ enum {
struct GRFTempEngineData {
uint16 cargo_allowed;
uint16 cargo_disallowed;
RailTypeLabel railtypelabel;
bool refitmask_valid; ///< Did the newgrf set any refittability property? If not, default refittability will be applied.
uint8 rv_max_speed; ///< Temporary storage of RV prop 15, maximum speed in mph/0.8
};
@@ -527,20 +528,14 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop
uint8 tracktype = buf->ReadByte();
if (tracktype < _cur_grffile->railtype_max) {
RailType railtype = GetRailTypeByLabel(_cur_grffile->railtype_list[tracktype]);
if (railtype == INVALID_RAILTYPE) {
/* Rail type is not available, so disable this engine */
ei[i].climates = 0x80;
} else {
rvi[i].railtype = railtype;
}
_gted[e->index].railtypelabel = _cur_grffile->railtype_list[tracktype];
break;
}
switch (tracktype) {
case 0: rvi->railtype = rvi->engclass >= 2 ? RAILTYPE_ELECTRIC : RAILTYPE_RAIL; break;
case 1: rvi->railtype = RAILTYPE_MONO; break;
case 2: rvi->railtype = RAILTYPE_MAGLEV; break;
case 0: _gted[e->index].railtypelabel = rvi->engclass >= 2 ? RAILTYPE_ELECTRIC_LABEL : RAILTYPE_RAIL_LABEL; break;
case 1: _gted[e->index].railtypelabel = RAILTYPE_MONO_LABEL; break;
case 2: _gted[e->index].railtypelabel = RAILTYPE_MAGLEV_LABEL; break;
default:
grfmsg(1, "RailVehicleChangeInfo: Invalid track type %d specified, ignoring", tracktype);
break;
@@ -661,8 +656,8 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop
if (_cur_grffile->railtype_max == 0) {
/* Use traction type to select between normal and electrified
* rail only when no translation list is in place. */
if (rvi->railtype == RAILTYPE_RAIL && engclass >= EC_ELECTRIC) rvi->railtype = RAILTYPE_ELECTRIC;
if (rvi->railtype == RAILTYPE_ELECTRIC && engclass < EC_ELECTRIC) rvi->railtype = RAILTYPE_RAIL;
if (rvi->railtype == RAILTYPE_RAIL && engclass >= EC_ELECTRIC) _gted[e->index].railtypelabel = RAILTYPE_ELECTRIC_LABEL;
if (rvi->railtype == RAILTYPE_ELECTRIC && engclass < EC_ELECTRIC) _gted[e->index].railtypelabel = RAILTYPE_RAIL_LABEL;
}
rvi->engclass = engclass;
@@ -5732,6 +5727,12 @@ static void ResetNewGRFData()
/* Allocate temporary refit/cargo class data */
_gted = CallocT<GRFTempEngineData>(Engine::GetPoolSize());
/* Fill rail type label temporary data for default trains */
Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
_gted[e->index].railtypelabel = GetRailTypeInfo(e->u.rail.railtype)->label;
}
/* Reset GRM reservations */
memset(&_grm_engines, 0, sizeof(_grm_engines));
memset(&_grm_cargos, 0, sizeof(_grm_cargos));
@@ -6477,6 +6478,16 @@ static void AfterLoadGRFs()
}
}
FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
RailType railtype = GetRailTypeByLabel(_gted[e->index].railtypelabel);
if (railtype == INVALID_RAILTYPE) {
/* Rail type is not available, so disable this engine */
e->info.climates = 0x80;
} else {
e->u.rail.railtype = railtype;
}
}
SetYearEngineAgingStops();
FinalisePriceBaseMultipliers();