summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/newgrf.cpp109
1 files changed, 45 insertions, 64 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index b49605b22..1f8756d0a 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -439,6 +439,44 @@ static void MapSpriteMappingRecolour(PalSpriteID *grf_sprite)
typedef bool (*VCI_Handler)(uint engine, int numinfo, int prop, byte **buf, int len);
+static bool CommonVehicleChangeInfo(EngineInfo *ei, int prop, byte **buf)
+{
+ switch (prop) {
+ case 0x00: // Introduction date
+ ei->base_intro = grf_load_word(buf) + DAYS_TILL_ORIGINAL_BASE_YEAR;
+ break;
+
+ case 0x02: // Decay speed
+ ei->decay_speed = grf_load_byte(buf);
+ break;
+
+ case 0x03: // Vehicle life
+ ei->lifelength = grf_load_byte(buf);
+ break;
+
+ case 0x04: // Model life
+ ei->base_life = grf_load_byte(buf);
+ break;
+
+ case 0x06: // Climates available
+ ei->climates = grf_load_byte(buf);
+ /* Sometimes a GRF wants hidden vehicles. Setting climates to
+ * zero may cause the ID to be reallocated. */
+ if (ei->climates == 0) ei->climates = 0x80;
+ break;
+
+ case 0x07: // Loading speed
+ /* Amount of cargo loaded during a vehicle's "loading tick" */
+ ei->load_amount = grf_load_byte(buf);
+ break;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+
static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
{
byte *buf = *bufp;
@@ -669,7 +707,7 @@ static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
break;
default:
- ret = true;
+ ret = !CommonVehicleChangeInfo(ei, prop, &buf);
break;
}
}
@@ -698,7 +736,7 @@ static bool RoadVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
break;
case 0x0A: { // Running cost base
- uint32 base= grf_load_dword(&buf);
+ uint32 base = grf_load_dword(&buf);
/* These magic numbers are used in GRFs to specify the base cost:
* http://wiki.ttdpatch.net/tiki-index.php?page=BaseCosts
@@ -806,7 +844,7 @@ static bool RoadVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
break;
default:
- ret = true;
+ ret = !CommonVehicleChangeInfo(ei, prop, &buf);
break;
}
}
@@ -919,7 +957,7 @@ static bool ShipVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
break;
default:
- ret = true;
+ ret = !CommonVehicleChangeInfo(ei, prop, &buf);
break;
}
}
@@ -1028,7 +1066,7 @@ static bool AircraftVehicleChangeInfo(uint engine, int numinfo, int prop, byte *
break;
default:
- ret = true;
+ ret = !CommonVehicleChangeInfo(ei, prop, &buf);
break;
}
}
@@ -2329,67 +2367,10 @@ static void FeatureChangeInfo(byte *buf, size_t len)
while (numprops-- && buf < bufend) {
uint8 prop = grf_load_byte(&buf);
- bool ignoring = false;
- switch (feature) {
- case GSF_TRAIN:
- case GSF_ROAD:
- case GSF_SHIP:
- case GSF_AIRCRAFT: {
- bool handled = true;
-
- for (uint i = 0; i < numinfo; i++) {
- Engine *e = GetNewEngine(_cur_grffile, (VehicleType)feature, engine + i);
- EngineInfo *ei = &e->info;
-
- /* Common properties for vehicles */
- switch (prop) {
- case 0x00: // Introduction date
- ei->base_intro = grf_load_word(&buf) + DAYS_TILL_ORIGINAL_BASE_YEAR;
- break;
-
- case 0x02: // Decay speed
- ei->decay_speed = grf_load_byte(&buf);
- break;
-
- case 0x03: // Vehicle life
- ei->lifelength = grf_load_byte(&buf);
- break;
-
- case 0x04: // Model life
- ei->base_life = grf_load_byte(&buf);
- break;
-
- case 0x06: // Climates available
- ei->climates = grf_load_byte(&buf);
- // XXX sometimes a grf wants hidden vehicles :o
- if (ei->climates == 0) ei->climates = 0x80;
- break;
-
- case 0x07: // Loading speed
- /* Hyronymus explained me what does
- * this mean and insists on having a
- * credit ;-). --pasky */
- ei->load_amount = grf_load_byte(&buf);
- break;
-
- default:
- handled = false;
- break;
- }
- }
-
- if (handled) break;
- } /* FALL THROUGH */
-
- default:
- if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) {
- ignoring = true;
- }
- break;
+ if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) {
+ grfmsg(1, "FeatureChangeInfo: Ignoring property 0x%02X of feature 0x%02X (not implemented)", prop, feature);
}
-
- if (ignoring) grfmsg(1, "FeatureChangeInfo: Ignoring property 0x%02X of feature 0x%02X (not implemented)", prop, feature);
}
}