summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/newgrf.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index fcfa39a41..7bb24f3b0 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -1403,8 +1403,25 @@ static bool TownHouseChangeInfo(uint hid, int numinfo, int prop, byte **bufp, in
break;
case 0x1E: // Accepted cargo types
- FOR_EACH_OBJECT grf_load_dword(&buf);
- ret = true;
+ FOR_EACH_OBJECT {
+ uint32 cargotypes = grf_load_dword(&buf);
+
+ /* Check if the cargo types should not be changed */
+ if (cargotypes == 0xFFFFFFFF) break;
+
+ for (uint j = 0; j < 3; j++) {
+ /* Get the cargo number from the 'list' */
+ uint8 cargo_part = GB(cargotypes, 8 * j, 8);
+ CargoID cargo = GetCargoTranslation(cargo_part, _cur_grffile);
+
+ if (cargo == CT_INVALID) {
+ /* Disable acceptance of invalid cargo type */
+ housespec[i]->cargo_acceptance[j] = 0;
+ } else {
+ housespec[i]->accepts_cargo[j] = cargo;
+ }
+ }
+ }
break;
default: